`
zhengjj_2009
  • 浏览: 153151 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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);
	}		
};

 

 

分享到:
评论

相关推荐

    单、多线程断点续传下载

    **多线程下载**则是在多个线程中同时进行,可以显著提高下载速度。多线程技术将大文件分割成若干小块,每个线程负责下载一块。这种方式在处理大文件时尤其有效,因为它可以利用多核处理器的优势,同时从服务器获取...

    Android的HTTP多线程下载示例代码

    首先,多线程下载的核心思想是将一个大的文件分成多个部分,每个部分在一个独立的线程中进行下载。这样做可以充分利用多核处理器的优势,同时降低网络延迟的影响,提高整体下载速度。 以下是实现多线程下载的基本...

    MVP列表例子

    通常,View接口包含显示数据和处理用户事件的方法,而Presenter接口则包含了对View进行操作以及获取数据的方法。 - **DataModel.java**:这可能是Model层的一个具体实现,负责从数据库或网络获取数据。 - **...

    Android应用跳动频谱_安卓源码.zip

    在Android平台上,开发一款应用通常涉及多个层面的技术,如...通过学习和理解这个源码,开发者不仅可以掌握Android平台的声音数据采集和处理,还能深入理解如何将复杂的数学运算应用于实际应用中,提升自己的技能水平。

    Android聊天客户端与服务器代码

    服务器端通常采用Java或Python等服务器端语言开发,它们负责处理来自多个客户端的请求,管理用户数据,以及维持聊天记录。在这个项目中,服务器代码可能使用了Socket编程来接受客户端的连接,并通过多线程处理并发的...

    Androd PM25.zip

    6. **异步处理**:为了防止UI线程阻塞,数据获取和处理通常会在异步任务或协程中执行。在Android中,可以使用AsyncTask、Handler、IntentService或现代的Kotlin协程来实现。 7. **通知**:当PM2.5值超过特定阈值时...

    Android listView 分页功能

    - **异步加载**:通常使用AsyncTask或其他异步处理机制,在后台加载新数据,防止UI线程阻塞。 4. **具体实现步骤** - **初始化ListView**:在布局文件中添加ListView,设置适配器。 - **定义Adapter**:自定义...

    简单的人人网客户端源码.zip

    对于有经验的开发者,它可以提供优化和重构的思路,例如使用现代网络库、响应式编程等。 总之,“简单的人人网客户端源码”提供了一个实际的Android网络应用开发实例,涵盖了网络通讯、用户认证、数据管理等多个...

    Android实验报告-天气数据解析.doc

    HTTP/1.0是其早期版本,而HTTP/1.1则进行了许多优化和扩展。HTTP协议具有以下主要特点: 1. **简单快速**:HTTP请求仅需包含方法(GET、POST等)和路径,简化了通信流程,使响应速度快。 2. **灵活**:HTTP允许传输...

    Android项目源码使用xutils框架写的天气预报.zip

    应用界面可能包含多个布局文件,如MainActivity的XML布局,展示城市的天气信息。开发者可能使用了TextView、ImageView等组件,并利用XUtils的ViewUtils进行动态数据绑定。 6. **异步处理**: 为了保证用户体验,...

    Android源码——“遇见”android应用源码.zip

    总之,“遇见”应用的源码是一个丰富的学习资源,涵盖了Android开发的多个方面,包括组件交互、UI设计、网络通信、数据存储、性能优化以及权限管理等。通过对这些源码的深入学习,开发者可以提升自己的Android编程...

    Android开发简单的天气app

    总的来说,开发一个简单的Android天气应用涉及到了UI设计、网络编程、数据解析、多线程处理、权限管理等多个方面,是Android开发基础技能的综合运用。通过这个项目,开发者不仅能熟悉Android Studio的使用,还能深入...

    Android 蓝牙串口调试助手源码(保证正确)

    源码中通常包含多个模块,如`MainActivity`、`BluetoothService`等。`MainActivity`是应用的主界面,展示蓝牙设备列表,用户在此选择连接目标。`BluetoothService`作为服务运行在后台,处理连接和通信逻辑。 3. **...

    oschina android app

    通过深入研究这些代码,开发者不仅可以学习到Android应用开发的基础知识,还可以了解到如何将一个复杂的应用拆分成多个模块、如何优化性能、如何处理多线程和网络通信,以及如何实现用户友好的交互设计等高级技巧。

    对三个方向的加速度进行测量并实时绘制图像.zip

    8. **性能优化**:考虑到加速度传感器会产生大量数据,开发者可能使用了异步处理(如`AsyncTask`)来避免UI线程阻塞,并可能通过ProGuard进行了代码优化和混淆,提高应用的运行效率和安全性。 9. **调试与测试**:...

    velloydemo

    3. **批量请求**: 可以通过RequestQueue发送多个请求,Volley会自动进行批处理和调度。 4. **取消请求**: 能方便地取消不再需要的请求,避免资源浪费。 5. **强大的错误处理**: 提供了丰富的错误处理机制,帮助...

    android paginated listview demo

    - 可能采用了懒加载策略,即只在需要时加载数据,减少初始加载时间和内存消耗。 - 数据可能通过异步任务(如AsyncTask)或使用Loader API在后台线程加载,以避免阻塞UI。 6. **性能优化**: - 使用ViewHolder...

    Android应用源码GlobalTime_0.9.zip

    通过上述分析,我们可以从`GlobalTime_0.9`源码中学到Android应用的基本架构、UI设计、数据处理、网络通信、多线程同步等多个方面的知识。对于初学者,这是一个很好的实践案例;对于有经验的开发者,它可以提供新的...

    简单新闻客户端

    新闻客户端的界面通常由多个布局文件组成,如`activity_main.xml`(主活动布局)和`news_detail.xml`(新闻详情布局)。在Android中,XML文件用于描述用户界面,包括按钮、文本视图、图片视图等组件。开发者会使用...

    Android 京东特卖倒计时抢购

    在Android平台上,京东特卖倒计时抢购功能是一个常见的电商应用特性,它涉及到用户界面设计、时间处理、网络通信等多个技术领域。本项目旨在帮助开发者理解和实现这一功能,同时解决可能出现的冲突和崩溃问题。 ...

Global site tag (gtag.js) - Google Analytics