0

アプリに奇妙な問題があります。アプリは 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(); 、デバッガーはサービスに接続されていませんでした。

誰かがこの問題またはそれ以上の解決策を知っていますか?

4

1 に答える 1

0
  • mService.doSomeStuff() を onServiceConnected() に移動するとどうなりますか? それを待つために while() ループを実行する必要はありません

  • bindService は何を返しますか? 何も問題がなければ true を返す必要があります

  • onServiceConnected() にログを記録して、いつ呼び出されるかを確認します

  • あなたのサービスはコンストラクターで何をしますか? どこかにぶら下がっていますか?

于 2012-04-20T09:11:50.243 に答える