其他分享
首页 > 其他分享> > android-如何有效使用Asynctask

android-如何有效使用Asynctask

作者:互联网

我是Android新手.我想问你们关于Asynctask的问题.我有一个活动显示项目的(应用程序,歌曲,故事..)详细信息.它需要许多相关数据,例如屏幕截图,相关应用程序(歌曲,故事),…那么Asynctask的最佳实现是什么?我是否为每个任务创建一个asynctask(例如:2 asynctask:1用于获取屏幕截图,1用于获取相关项目…)或全部放入doInBackGround并发布进度?

提前致谢.

解决方法:

从面向对象的角度来看,应该始终将业务逻辑内容与UI内容隔离.我会将所有业务调用(如getSong(),getStore()等)隔离并集中到POJO中,并使我的活动类仅专注于UI操作/渲染,这是我的方法:

>定义接口IBusinessDAO
>定义RealBusinessDAO实施IBusinessDAO
>定义MockBusinessDAO实施IBusinessDAO
>呼叫IBusinessDAO.getSong();在AsyncTask.doInBackground()内部

public class MyActivity extends Activity {
  IBusinessDAO businessDAO;

  ... ...

  private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
    ... ...        

    protected void doInBackground(Void... params) {
      businessDAO.getSong();
    }
  }

  ... ...

  public void onCreate(Bundle savedInstanceState) {
    if (runInTest)
      businessDAO = new MockBusinessDAO();
    else
      businessDAO = new RealBusinessDAO();

    new myAsyncTask().execute();
  }

}

因此,在不同活动之间的每个AsyncTask实现中,您的AsyncTask.doInBackgroud()都将变得简洁明了,从而使您的代码更加高效和可维护.

它也有助于提高代码的可测试性,因为它是POJO,所以可以对业务逻辑进行单元测试,因此您可以使用纯JUnit编写测试用例.有时我们想测试UI组件,而我们并不真正在乎底层业务逻辑是如何实现的,例如,我的业务逻辑连接到远程http服务器下载一些json数据,我不想每次都这样做要测试UI布局,对于这种情况,我可以轻松地使用MockBusinessDAO(某种形式的Spring DI概念)来更改我的所有Activity,以测试UI组件,而无需考虑实际业务逻辑的实现方式.

最后,它还提高了代码的可重用性,因为businesDAO除了与经典的POJO无关之外,与Andriod无关,此外,您无需担心BusinessDAO实现中的任何并发性,因为它的所有方法都将在AsyncTask.doInBackground( ) 方法.

希望对您有所帮助.

标签:android-asynctask,thread-safety,android
来源: https://codeday.me/bug/20191201/2082602.html