70.自定义异步任务

1.抽象异步任务类:

  1. public abstract class YTAsyncTask<T> {
  2. private static final HandlerThread handlerThread = new HandlerThread(YTAsyncTask.class.getName(), 10);
  3. public YTAsyncTask() {
  4. }
  5. protected abstract void onPreExecute();
  6. protected abstract T doInBackground();
  7. protected abstract void onPostExecute(T param);
  8. public final YTAsyncTask<T> execute() {
  9. final Handler mainHandler = new Handler(Looper.getMainLooper());
  10. Handler bgHandler = new Handler(handlerThread.getLooper());
  11. this.onPreExecute();
  12. bgHandler.post(new Runnable() {
  13. public void run() {
  14. final T param= YTAsyncTask.this.doInBackground();
  15. mainHandler.post(new Runnable() {
  16. public void run() {
  17. YTAsyncTask.this.onPostExecute(param);
  18. }
  19. });
  20. }
  21. });
  22. return this;
  23. }
  24. static {
  25. handlerThread.start();
  26. }
  27. }

2.使用用例:

  1. public class MainActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. testAsyncTask();
  7. }
  8. private void testAsyncTask() {
  9. new YTAsyncTask<String>() {
  10. @Override
  11. protected void onPreExecute() {
  12. Log.e("ytr", "onPreExecute,currentThread=" + Thread.currentThread().getName());
  13. }
  14. @Override
  15. protected String doInBackground() {
  16. Log.e("ytr", "doInBackground,currentThread=" + Thread.currentThread().getName());
  17. return "Hello World";
  18. }
  19. @Override
  20. protected void onPostExecute(String param) {
  21. Log.e("ytr", "onPostExecute,currentThread=" + Thread.currentThread().getName()+" param="+param);
  22. }
  23. }.execute();
  24. }
  25. }

打印结果:





原文地址:https://www.cnblogs.com/yutianran/p/5077709.html