gpt4 book ai didi

java - onStart 先于 onCreate 完成的原因

转载 作者:行者123 更新时间:2023-12-01 19:01:07 26 4
gpt4 key购买 nike

在我正在处理的应用程序上,onCreate 使用 startService() 启动一个服务,随后,该 Activity 在其 onStart 中调用 bindService(到同一服务)。问题是服务直到 onStart 完成后才初始化,这会导致由空服务引起的空指针异常导致 fatal error 。我不知道如何在不使用半途而废的解决方案的情况下解决这个问题,而且我不知道 onStart 如何在 onCreate 之前完成。

建议?非常感谢任何帮助。

public class PNetworkService extends Service {
private final IBinder binder = new NtwkSvcBinder(this);


@Override
public void onCreate() {
// Creates a HandlerThread to process the network events.
HandlerThread handlerThread = new HandlerThread("SystemStartService",
Process.THREAD_PRIORITY_BACKGROUND);
// Starts the network thread.
handlerThread.start();
// Obtains looper so that that the NetworkServiceHandler is bound to that looper.
serviceLooper = handlerThread.getLooper();
// Create the Network Service Handler.
nsh = new NetworkServiceHandler(serviceLooper, this);
messenger = new Messenger(nsh);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand");
return START_STICKY;
}

@Override
public IBinder onBind(Intent i) {
Log.i(TAG, "onBind called");
return binder;
}

public void setExtHandler(Handler extHandler) {
Log.i(TAG, "setting exthandler");
nsh.setExtHandler(extHandler);
}
}

最佳答案

我认为主要问题是你假设当Activity的onStart执行时服务已经在运行并且期望bindService立即绑定(bind)。但是,通常它不起作用。

我认为这种行为的原因是Android逐一实例化组件,认为无法在Activity的onCreate中同步创建服务。肯定会被创建,但是之后系统队列会转到这个新的服务创建。

那么,如果您只提供正确的连接处理来绑定(bind)服务,它会起作用吗?例如移动以下代码

mConnection.getService().setExtHandler(mapActivityHandler);

onServiceConnected()内部?

关于java - onStart 先于 onCreate 完成的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12235388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com