![](/img/trans.png)
[英]why does onStart() method run before onCreate in my android project?
[英]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.