停止asynctask。如何关闭或停止另一次执行的后台进程?

时间:2013-05-24 00:52:51

标签: android background android-asynctask

我正在制作APK,但我遇到了问题。 我的APK在完成后发送GET请求。 我有一个asynctask类用于定期发送GET请求。 问题是当我再次启动应用程序时,我需要杀死上一次启动的后台进程。 我将uses-permission android:name="android.permission.RESTART_PACKAGES"uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"放在manifest.xml中,并使用以下代码:

if (URLUtil.isValidUrl(URL_Pet_GET) && URLUtil.isValidUrl(URL_Host)){
    //Get_Backgnd.cancel(true); not working  
      context.getSystemService(Context.ACTIVITY_SERVICE);
      manager.killBackgroundProcesses(String.valueOf(process.processName));
    //not working

    //ActivityManager activityManager = (ActivityManager) context.getSystemService("activity");
    //activityManager.restartPackage(packageName);
    //not working

    pet_get_backgrnd Get_Backgnd = new pet_get_backgrnd();
    Get_Backgnd.execute();  //Send GET request that I need stop on next execution of apk 
}  
private class pet_get_backgrnd extends AsyncTask<Context, Object, Object>{
    /*@Override
    protected void onPreExecute() {
        cancel(true);
    }*/ //not working
    @Override
    protected Object doInBackground(Context... params) { 
        //send Get requests
    }
}

如何在下次执行APK时取消Get_Backgnd的执行?

1 个答案:

答案 0 :(得分:0)

  

问题在于,当我再次启动应用程序时,需要杀死之前启动的后台进程。

除非您在清单中做了一些非常不寻常的事情,否则没有“前一次启动后台进程”。大多数Android应用程序只有一个进程,因此如果您的AsyncTask正在执行某些操作,则会在当前进程中执行此操作。

  

如何在下次执行apk时取消Get_Backgnd的执行?

cancel()对象上调用AsyncTask。如果它正在运行,则该对象存在,因此请在其上调用cancel()

当然,正确的答案也可能是将您的应用重写为“定期发送请求”,使用不涉及AsyncTask的其他内容(例如AlarmManager和{ {1}})。