2015-09-10 145 views
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); 
    } 
} 

}

在此先感谢我只想简单知道如何取消异步任务的工作完成之后。

回答

1

我只想简单知道如何取消异步任务后的工作是 完成

你不需要取消(照顾它)的AsyncTask将自动工作完成后终止。就像执行onPostExecute()之后一样,如果在doInBackground()之后可用。

这是Asynctask如何在android中工作。

+1

问题来了,当我从oneactivity回来,然后打开两个活动,然后应用程序崩溃,当我再次打开该应用程序,然后两个活动轻松打开帮助我 –

+0

发布您的例外。因为我怀疑你在访问AsyncTask中的Activity引用时遇到了问题。 – user370305