3

私がやろうとしているのは、AppWidget がユーザーの Android フォンのホーム画面から削除されたら、AppWidget を更新するバックグラウンド サービスを停止したいということです。

これが私が使用しているコードです...何が悪いのかわかりませんか?

@Override
 public void onDeleted(Context context, int[] appWidgetIds){
 Intent serviceIntent = new Intent(context, UpdateService.class);
 context.stopService(serviceIntent);
 super.onDeleted(context, appWidgetIds);
}

何か案は?助けてくれてありがとう。

4

2 に答える 2

5

多くの研究の後、私は最終的にそれを修正しました。ここでの私の目標は、すべての AppWidget インスタンスが画面から削除された場合にバックグラウンド サービスを停止することでした。

やったのはこれ…

  1. 共有設定を使用して 1 と 0 を切り替えました。SharePref は、ウィジェットの最初のインスタンスがユーザーによって画面に表示されたときに 1 に切り替えられました。アプリ ウィジェットの最後のインスタンスが画面から削除されると、0 に戻ります。

  2. Service の @Override OnReceive メソッド。これらのブロードキャストをリッスンします - AppWidget Enabled (ウィジェットの最初のインスタンスが画面に表示されたときにブロードキャスト)、AppWidget Disabled (ウィジェットの最後のインスタンスが画面から削除されたときに OS によってブロードキャスト) AppWidget Disabled がブロードキャストされたときオーバーライドされたメソッド OnDisabled メソッドを呼び出します。

3. @Override OnDisabled メソッドで stopService を呼び出します。完璧に動作します。

OnDeleted と OnDisabled の違いを覚えておいてください。OnDeleted は、ウィジェットのインスタンスが削除されたときに呼び出されます。これは、削除されるウィジェットが最後のものであることを意味するものではありません。画面にウィジェット インスタンスが 1 つしかない場合でも、サービスを引き続き実行したかったのです。

*また、上記のすべてを実行せず、Android に Service などの処理を任せる場合は、IntentService を使用します。* *

于 2011-02-18T18:11:31.140 に答える
0

サービス自体で stopservice が onDestroy を呼び出していると思います。サービスの次のコードで機能します

@Override
public void onDestroy() {
    super.onDestroy();
    timer.cancel();
    //Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();

}

timer は、_startService void で開始するタイマーです

于 2010-12-07T11:36:33.847 に答える