アプリに奇妙な問題があります。アプリは 1 つのサービスと 1 つのアクティビティで構成されます。サービスは「常に」実行する必要がありますが、アクティビティはサービスを制御する単なるインターフェイスであり、頻繁に実行する必要はありません。そのため、まだ実行されていない場合はアクティビティでサービスを作成しonCreate()
、それにバインドしたいと考えています。コードは次のようになります。
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder binder) {
mService= ((MyService.LocalBinder) binder).getService();
mService.setView(ChatdroidActivity.this);
}
public void onServiceDisconnected(ComponentName className) {
Controler = null;
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initUI();
if(!MyService.isRunning()){
Intent s= new Intent(this, MyService.class);
startService(s);
}
bindService(new Intent(this, MyService.class), mConnection,
Context.BIND_AUTO_CREATE);
while(mService == null){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
mService.doSomeStuff();
}
問題は、サービスが開始されていないように見えることです。アプリがフリーズしたという Android メッセージの後、デバッガーを切断するまで、アプリは while ループにあります。Web で解決策を探しているときに、突然 Eclipse が起動し、サービスのonCreate()
-method にアクティブなブレークポイントが 2 秒間ほど表示された後、終了しました。デバッガーを切断するまで、Logcat はエラーを表示しません。私のサービスの最初の行は、呼び出しを追加する前onCreate()
はandroid.os.Debug.waitForDebugger();
、デバッガーはサービスに接続されていませんでした。
誰かがこの問題またはそれ以上の解決策を知っていますか?