1

ウィジェットとウィジェットのボタンが IntentService を起動するアプリケーションを構築しています。onHandleIntent() はいくつかのコードを実行し、ハンドラーを介してトーストを発生させます。ウィジェットのボタンをクリックすると、トーストが表示され、onHandleIntent が終了したことがわかります。しかし、バックグラウンド サービスを見ると、アプリがまだそこに表示されます。

ユーザーとして、アプリが常にバックグラウンドで実行され、貴重な RAM が浪費されると、非常にイライラします。ウィジェットは更新されないため (xml の更新率は 0)、ウィジェットをバックグラウンドで実行する必要はありません。

では、なぜサービスがまだ実行されているのでしょうか? どうすればそれを止めることができますか?

IntentService コード:

public class WidgetCheckService extends IntentService {
    private int mAppWidgetId;
    Handler mHandler = new Handler();

    public SalaryWidgetCheckService(String name) {
        super("laceService");
    }

    public SalaryWidgetCheckService() {
        super("laceService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // Badass code
            mHandler.post(new DisplayToast(getString(R.string.widget_service_check_in_success_toast_text).replace("LACE", lace)));
        else mHandler.post(new DisplayToast(getString(R.string.widget_service_check_out_success_toast_text).replace("LACE", lace)));
    }

    private class DisplayToast implements Runnable{
        String mText;

        public DisplayToast(String text){
            mText = text;
        }

        public void run(){
            Toast.makeText(WidgetCheckService.this, mText, Toast.LENGTH_SHORT).show();
        }
    }
}

ありがとう、エラド。

4

1 に答える 1

3

しかし、バックグラウンドサービスを見ると、まだアプリが表示されています。

サービスが終了しても、プロセスは自動的に終了しません。Androidは、アプリから何かを再度実行する必要が生じた場合に備えて、他のアプリ用にRAMを解放する必要があるまで、プロセスを実行し続けます。これは、Android上の他のアプリと何ら変わりはありません。

于 2012-03-07T16:43:54.267 に答える