无论如何要从关闭的android应用程序中杀死线程/ asyncstask
我的应用程序必须在运行新的 asynctask 之前杀死 asynctask
我尝试了 Thread.getAllStackTraces() 并在应用程序打开时检查 AsyncTask 名称,但我无法杀死它。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
killThreadByName("AsyncTask");
LongOperation task = new LongOperation(this);
task.execute();
}
public void killThreadByName(String threadName) throws InterruptedException {
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t.getName().contains(threadName)) {
t.interrupt();
}
}
}
private class LongOperation extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... params) {
while(true){
try {
Thread.sleep(1000);
publishProgress("This is number : " + i);
Log.i("TEST","NUMBER : " + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
Toast.makeText(mContext, values[0], Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Toast.makeText(mContext, "Done!", Toast.LENGTH_SHORT).show();
}
}
}
此应用程序用于计数 1 到 25,当我关闭应用程序时,它仍在运行。
但是当我重新打开应用程序时,无法杀死旧线程。
我的意思是即使我关闭应用程序,后台服务(Asynctask)仍然会永远运行。问题是如果我再次打开这个应用程序,我希望旧的异步任务被杀死,新的异步任务从 1 开始。现在如果我启动这个应用程序超过 1 次,就会有很多异步任务。
谢谢