Java onStart在onCreate之前完成的原因
在我正在处理的应用程序上,onCreate使用startService()启动一个服务,之后,该活动在其onStart中调用bindService(对该服务)。问题是,直到onStart完成之后,服务才初始化,这会导致由null服务引起的nullpointer异常导致致命错误。我不知道如何在不使用半途而废的解决方案的情况下解决这个问题,我也不知道onStart在onCreate之前是如何完成的 建议?非常感谢您的帮助Java onStart在onCreate之前完成的原因,java,android,Java,Android,在我正在处理的应用程序上,onCreate使用startService()启动一个服务,之后,该活动在其onStart中调用bindService(对该服务)。问题是,直到onStart完成之后,服务才初始化,这会导致由null服务引起的nullpointer异常导致致命错误。我不知道如何在不使用半途而废的解决方案的情况下解决这个问题,我也不知道onStart在onCreate之前是如何完成的 建议?非常感谢您的帮助 public class PNetworkService extends Se
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);
}
}
我认为主要的问题是,您假设当活动的onStart正在执行时服务已经在运行,并期望bindService立即绑定。然而,它通常不起作用 我认为,这种行为的原因是Android一个接一个地实例化组件,认为一旦创建活动,就无法在内部同步创建服务。当然,它将被创建,但是在系统队列创建之后,它将转到这个新的服务创建 那么,如果您只为绑定服务提供正确的连接处理,它会起作用吗?例如,移动下面的代码
mConnection.getService().setExtHandler(mapActivityHandler);
在
onServiceConnectiond()
?的内部,我认为主要的问题是,当活动的onStart正在执行时,您假定服务已经在运行,并且希望bindService立即绑定。然而,它通常不起作用
我认为,这种行为的原因是Android一个接一个地实例化组件,认为一旦创建活动,就无法在内部同步创建服务。当然,它将被创建,但是在系统队列创建之后,它将转到这个新的服务创建
那么,如果您只为绑定服务提供正确的连接处理,它会起作用吗?例如,移动下面的代码
mConnection.getService().setExtHandler(mapActivityHandler);
我欠你一大笔钱。是的,我觉得这是因为组件是单独实例化的。谢谢,我欠你一大笔钱。是的,我觉得这是因为组件是单独实例化的。谢谢