在我正在处理onCreate的应用程序上,启动一个带有startService()的服务,然后,同样的活动在其onStart中调用bindService(到同一个服务)。问题是在onStart完成之后很久就没有初始化Sevice,这会导致由null服务引起的nullpointer异常导致致命错误。我不知道如何在不使用半解决方案的情况下解决这个问题,我不知道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);
}
}
答案 0 :(得分:4)
我认为主要的问题是你假设当Activity的onStart正在执行时服务已经在运行,并且期望bindService立即绑定。但是,通常它不起作用。
我认为,这种行为的原因是Android逐个实例化组件,认为你无法在onCreate of Activity中同步创建服务。确定它将被创建,但在系统队列之后将转到这个新的服务创建。
如果您只是提供正确的Connection处理绑定服务,那么它会起作用吗?例如,移动代码
mConnection.getService().setExtHandler(mapActivityHandler);
到onServiceConnected()
内部?