解析Android中线程的好处
来源:互联网 发布:存脐带血有必要吗 知乎 编辑:程序博客网 时间:2024/05/01 16:06
关于线程相信不用多做解释了,看看本文吧!
AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!
一、Android有两种方式处理线程:
比较耗时的操作放在后台服务,通过通知机制通知用户使用的活动(activity);在后台线程中处理耗时的操作
二、使用Handler
创建后台线程最友好的办法是创建一个Handler子类的实例。只需一个Handler对应一个Activity。自定义的后台线程可与Handler通信,Handler将与UI线程一起工作。和Handler通信,需要两个选项,message和runnable对象。
三、Message
发送Message到Handler,第一步调用obtainMessage(),从池中得到Message对象。
然后,可通过消息队列将Message发送给Handler,通过sendMessage…()方法族:
sendMessage() 立即发送Message到消息队列
sendMessageAtFrontOfQueue() 立即发送Message到队列,而且是放在队列的最前面
sendMessageAtTime() 设置时间,发送Message到队列
sendMessageDelayed() 在延时若干毫秒后,发送Message到队列
为了处理Message,Handler需要实现handleMessage(),当Message出现在队列中时,会调用handleMessage()方法。另外,Handler可在需要时更新UI。
以下示例演示一个进度条,每隔1秒钟增加1/20个单位。效果图:
java代码:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <ProgressBar
- android:id="@+id/progress"
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>
java代码:
- package eoe.demo;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.widget.ProgressBar;
- public class ShowThread extends Activity {
- ProgressBar bar;
- Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- bar.incrementProgressBy(5);
- }
- };
- boolean isRunning = false;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- bar = (ProgressBar) findViewById(R.id.progress);
- }
- @Override
- protected void onStart() {
- super.onStart();
- bar.setProgress(0);
- Thread background = new Thread(new Runnable() {
- @Override
- public void run() {
- for (int i = 0; i < 20 && isRunning; i++) {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
- handler.sendMessage(handler.obtainMessage());
- }
- }
- });
- isRunning = true;
- background.start();
- }
- @Override
- protected void onStop() {
- super.onStop();
- isRunning = false;
- }
- }
小结:
当第一次启动一个android程序是,android会自动创建一个称为“main”主线程的线程。这个线程很重要,因为它负责吧时间分派到相应对控件,其中就包括屏幕绘图时间,它同样是用户与android控件交互的线程。
- 解析Android中线程的好处
- Android的线程池好处
- 线程池的好处
- 线程池的好处
- 线程池的好处
- Java线程池的好处
- 使用线程池的好处
- 使用线程池的好处
- 使用线程池的好处
- Android中进程和线程解析,不是想象的那样
- 源码解析IntentService的好处
- Android Studio的好处
- android service的好处
- Android studio的好处
- Android MVP的好处
- 线程二、线程的好处和坏处
- 【使用线程池的好处】多线程的环境中,尽量采用线程池
- 【使用线程池的好处】多线程的环境中,尽量采用线程池
- 在ARM板上的linux系统中查看进程实际使用物理内存
- hadoop java.net.NoRouteToHostException: 没有到主机的路由
- POJ 3481 Double Queue
- 关于WebView同JS调用的几点实现
- 文章标题
- 解析Android中线程的好处
- UESTC 邱老师降临小行星(记忆化搜索)
- SharePoint 2013 搜索体系结构
- Android 操作系统的内存回收机制
- Mysql 存储过程基本语法
- 正则
- 黑马程序员------类和对象
- 网络编程Socket之TCP之close/shutdown详解
- linux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说