Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java onStart在onCreate之前完成的原因_Java_Android - Fatal编程技术网

Java onStart在onCreate之前完成的原因

Java onStart在onCreate之前完成的原因,java,android,Java,Android,在我正在处理的应用程序上,onCreate使用startService()启动一个服务,之后,该活动在其onStart中调用bindService(对该服务)。问题是,直到onStart完成之后,服务才初始化,这会导致由null服务引起的nullpointer异常导致致命错误。我不知道如何在不使用半途而废的解决方案的情况下解决这个问题,我也不知道onStart在onCreate之前是如何完成的 建议?非常感谢您的帮助 public class PNetworkService extends Se

在我正在处理的应用程序上,onCreate使用startService()启动一个服务,之后,该活动在其onStart中调用bindService(对该服务)。问题是,直到onStart完成之后,服务才初始化,这会导致由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);
}
}

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

我认为,这种行为的原因是Android一个接一个地实例化组件,认为一旦创建活动,就无法在内部同步创建服务。当然,它将被创建,但是在系统队列创建之后,它将转到这个新的服务创建

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

mConnection.getService().setExtHandler(mapActivityHandler);

onServiceConnectiond()

的内部,我认为主要的问题是,当活动的onStart正在执行时,您假定服务已经在运行,并且希望bindService立即绑定。然而,它通常不起作用

我认为,这种行为的原因是Android一个接一个地实例化组件,认为一旦创建活动,就无法在内部同步创建服务。当然,它将被创建,但是在系统队列创建之后,它将转到这个新的服务创建

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

mConnection.getService().setExtHandler(mapActivityHandler);

我欠你一大笔钱。是的,我觉得这是因为组件是单独实例化的。谢谢,我欠你一大笔钱。是的,我觉得这是因为组件是单独实例化的。谢谢