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