-1

サービス クラスで onCreate() を宣言したハンドラがあります。私のアプリは、特定の状況でこのハンドラーを起動します ( postDelayed メソッド )。しかし、万が一ユーザーがアプリケーションを終了したい場合は、そのハンドラーを停止してください (X 時間で実行されないように - removeCallBacks() を使用)。アクティビティのサービスで宣言されたそのハンドラ オブジェクトへの参照を取得して、そのメソッドを呼び出せるようにするにはどうすればよいですか? (適切な方法)。それは可能ですか?

メイン アクティビティの Reference handler objectは既に確認しましたが、あまり役に立ちませんでした。

静的メソッドを介して参照を取得できますが、これは本当に適切な方法ですか?

4

2 に答える 2

1

サービスのオブジェクトがすでにある場合(を通過)、 Handlerインスタンス ServiceConnectionを呼び出すサービス内のパブリックメソッドを公開できます。removeCallBacks

于 2013-02-07T16:05:55.647 に答える
1

アクティビティにハンドラー参照を含める必要はありません。サービスにハンドラーを停止するように依頼できます。

ケースに最も簡単なアクティビティからサービスと通信する方法はたくさんあります。

1-サービスが受信したときに呼び出すstopHandlerなどのアクションで呼び出しstartServiceて渡しますIntentremoveCallBacks()

2-LocalBroadcastサービスにメッセージを送信してハンドラーを停止するために使用します

サービスにバインドすることもできますが、これは以前の方法よりも余分な作業になります

編集

あなたの活動では、次のようなものを呼び出すことができます

Intent intent = new Intent(context,MyService.class);
intent.setAction("stopHandler");
startService(intent);

サービス内onStartCommandまたはonHandleIntentサービスの種類に依存

if(intent.getAction().equals("stopHandler")){
   // call removeCallBacks()
}

2番目の解決策については、これを参照してください

于 2013-02-07T16:09:34.670 に答える