陕西省岐山县独门独院:Android-有关线程的处理

来源:百度文库 编辑:九乡新闻网 时间:2024/05/03 00:27:58
AndroidAndroid developmentAndroid 开发Android-HandlerhandleMessagemessagethreadtutor安卓
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个单位。

布局文件:
12345678
java代码:
package com.easymorse.thread;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; }}