即使在onHandleIntent完成后,IntentService仍在后台运行

时间:2012-03-07 16:41:25

标签: android android-service intentservice

我正在构建一个具有窗口小部件的应用程序,并且窗口小部件中的按钮会启动IntentService。 onHandleIntent()运行一些代码,然后通过处理程序提出一个toast。 单击小部件中的按钮后,我看到吐司,我知道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();
        }
    }
}

谢谢,Elad。

1 个答案:

答案 0 :(得分:2)

  

但是当我查看后台服务时,我仍然会在那里看到我的应用程序。

服务结束后,您的流程不会自动终止。 Android将保持您的进程运行,直到它需要释放其他应用程序的RAM,以防万一它恰好需要再次从您的应用程序运行。这与Android上的任何其他应用没有什么不同。