在自己项目中,每当有耗时操作就是创建新的线程, 几乎忘记Android 还有自带异步线程工具AsyncTask ,其中底层已经用线程池管理线程,不用我们考虑线程的管理问题, 实际把其写到基类中
public class BaseActivity extends AppCompatActivity{ protected List<AsyncTask<Void, Void, Boolean>> myAsyncTasks = new ArrayList<AsyncTask<Void, Void, Boolean>>(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } /** * 添加异步任务到数组中 * * @param asyncTask */ public void putAsyncTask(AsyncTask<Void, Void, Boolean> asyncTask) { myAsyncTasks.add(asyncTask.execute()); } /** * 清除所有的异步任务 */ protected void clearAsyncTask() { Iterator<AsyncTask<Void, Void, Boolean>> iterator = myAsyncTasks .iterator(); while (iterator.hasNext()) { AsyncTask<Void, Void, Boolean> asyncTask = iterator.next(); if (asyncTask != null && !asyncTask.isCancelled()) { asyncTask.cancel(true); } } myAsyncTasks.clear(); } @Override protected void onDestroy() { clearAsyncTask(); super.onDestroy(); } }
当使用时调用
private void search() { putAsyncTask(new AsyncTask<Void, Void, Boolean>() { @Override protected Boolean doInBackground(Void... params) { try { // TODO: 耗时操作 } catch (Exception e){ return false; } return true; } @Override protected void onPostExecute(Boolean aBoolean) { if(aBoolean){ // TODO: 更新UI }else { Toast.makeText(MainActivity.this,"查询失败",Toast.LENGTH_LONG).show(); } super.onPostExecute(aBoolean); } }); }