MainActivity获取多个数据是采用多线程进行处理和优化

按不考虑性能和执行效率、只按照正常基本的开发流程是如下代码

public class MainActivity extends Activity {
	private ListView listView;
	private File cacheDir;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /**  检查SD卡的缓存目录是否存在      */
        File sdCardDir = Environment.getExternalStorageDirectory();
        cacheDir = new File(sdCardDir, "cache");
        if(!cacheDir.exists()) cacheDir.mkdirs();   
        
        try {
        	/**正常的处理逻辑: 获取数据传递给Adapter,为ListView设置Adapter**/
			listView = (ListView)findViewById(R.id.listView);
			List<Topic> topicList = TopicService.getContacts();
			BaseAdapter adapter = new TopicAdapter(this, topicList, 
					R.layout.listview_item, cacheDir );
			listView.setAdapter(adapter);
		} catch (Exception e) {
			e.printStackTrace();
		}
    }    
}

 现在考虑到获取业务数据需要的时间可能比较长,所以需要用Handler作为Activity的属性,结合多线程来处理。

让子线程负责获获取数据,将取到的数据通过Hander的sendMessage()的方法回传给Handler,

再由handler的handleMessage()从Message中取出数据,转换为对应的数据类型,最后设置回ListView的适配器中。

/**正常的处理逻辑: 获取数据传递给Adapter,为ListView设置Adapter**/
/*List<Topic> topicList = TopicService.getContacts();
BaseAdapter adapter = new TopicAdapter(this, topicList, 
		R.layout.listview_item, cacheDir );
listView.setAdapter(adapter);*/

Runnable runnable = new Runnable(){
	@Override
	public void run() {
		try {
			List<Topic> topicList = TopicService.getContacts();
			handler.sendMessage(handler.obtainMessage(100, topicList));
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}				
};
new Thread(runnable).start();

 

Handler handler = new Handler(){
	@Override
	public void handleMessage(Message msg) {
		/**这里负责处理 子线程做完后的工作**/
		List<Topic> topicList = (List<Topic>)msg.obj;
		BaseAdapter adapter = new TopicAdapter(MainActivity.this, topicList, 
				R.layout.listview_item, cacheDir );
		listView.setAdapter(adapter);
	}		
};

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值