0
我有在取消异步任务问题或可我在错误的方式取消它,我有一个主要活动,其中有两个活动的一,二,问题是,的Android异步任务取消错误
我想在一个活动中取消异步任务,这样当活动二开始时,它可以再次启动或执行,应用程序不会崩溃。
OneActivity
public class OneActivity extends AppCompatActivity {
ListView listview;
List<ParseObject> ob;
ProgressDialog mProgressDialog;
ArrayAdapter<String> adapter;
private RemoteDataTask tsk;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
//noinspection ConstantConditions
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setIcon(R.drawable.gpsicon);
AsyncTask tsk = new RemoteDataTask().execute();
}
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(OneActivity.this);
mProgressDialog.setMessage("Please wait ......");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
"One");
query.orderByDescending("_created_at");
try {
ob = query.find();
} catch (com.parse.ParseException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
listview = (ListView) findViewById(R.id.one_list);
adapter = new ArrayAdapter<String>(OneActivity.this,
R.layout.one_row_item);
for (ParseObject one : ob) {
adapter.add((String) one.get("onec"));
}
listview.setAdapter(adapter);
mProgressDialog.dismiss();
tsk.cancel(true);
}
}
@Override
protected void onDestroy()
{
super.onDestroy();
tsk.cancel(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
TwoActivity
public class TwoActivity extends AppCompatActivity {
ListView listview;
List<ParseObject> ob;
ProgressDialog mProgressDialog;
ArrayAdapter<String> adapter;
private RemoteDataTask tsk;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
//noinspection ConstantConditions
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setIcon(R.drawable.gpsicon);
AsyncTask tsk = new RemoteDataTask().execute();
}
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(TwoActivity.this);
mProgressDialog.setMessage("Please wait ......");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
"Two");
query.orderByDescending("_created_at");
try {
ob = query.find();
} catch (com.parse.ParseException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
listview = (ListView) findViewById(R.id.two_list);
adapter = new ArrayAdapter<String>(TwoActivity.this,
R.layout.two_row_item);
for (ParseObject two : ob) {
adapter.add((String) two.get("twoc"));
}
listview.setAdapter(adapter);
mProgressDialog.dismiss();
tsk.cancel(true);
}
}
@Override
protected void onDestroy()
{
super.onDestroy();
tsk.cancel(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
在此先感谢我只想简单知道如何取消异步任务的工作完成之后。
问题来了,当我从oneactivity回来,然后打开两个活动,然后应用程序崩溃,当我再次打开该应用程序,然后两个活动轻松打开帮助我 –
发布您的例外。因为我怀疑你在访问AsyncTask中的Activity引用时遇到了问题。 – user370305