私が取り組んでいるアプリケーションでは、onCreate が startService() でサービスを開始し、その後、同じアクティビティが onStart で bindService(同じサービスに対して) を呼び出します。問題は、onStart が完了するまでサービスが初期化されず、null サービスによって引き起こされる nullpointer 例外から致命的なエラーが発生することです。中途半端なソリューションを使用せずにこれを回避する方法がわかりません。onCreateの前にonStartがどのように終了するかわかりません。
提案?どんな助けでも大歓迎です。
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);
}
}