onStart在onCreate之前完成的原因

时间:2012-09-02 10:57:16

标签: java android

在我正在处理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);
}
}

1 个答案:

答案 0 :(得分:4)

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

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

如果您只是提供正确的Connection处理绑定服务,那么它会起作用吗?例如,移动代码

mConnection.getService().setExtHandler(mapActivityHandler);

onServiceConnected()内部?