簡體   English   中英

onStart在onCreate之前完成的原因

[英]Reason why onStart finishes before onCreate

在我正在使用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);
}
}

我認為主要問題是您假設在執行Activity的onStart時服務已經在運行,並且期望bindService立即綁定。 但是,通常它不起作用。

我認為,這種行為的原因是Android逐一實例化組件,認為您無法在Activity的onCreate內同步創建服務。 確定會創建,但是在系統隊列之后將轉到此新服務創建。

那么,如果您僅提供對Connection的正確處理以綁定服務,它將起作用嗎? 例如移動以下代碼

mConnection.getService().setExtHandler(mapActivityHandler);

onServiceConnected()內部?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM