Есть ли способ убить поток/асинстаск из закрытого приложения для Android?
Мое приложение должно убить асинтаск перед запуском нового асинтаска
Я пробовал 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 раза.
Спасибо
new LongOperation(this)
этоthis
этоActivity
? Зачем вам нужно передаватьActivity
вAsyncTask
, если у вас нет этого конструктора наLongOperation
? - person HendraWD   schedule 14.03.2017