代码如下:
public class MainActivity extends Activity {
private static final String TAG = "MainThread";
private Timer timer;
private TimerTask timerTask;
private Handler mMainHandle,mChildHandle;
private int i=0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timer = new Timer();
timerTask = new MyTimerTask();
mMainHandle = new Handler(){
public void handleMessage(Message msg) {
Log.e("mainhandle", i+"");
}
};
new ChildThread().start();
timer.schedule(timerTask, 0, 5000);
}
public class MyTimerTask extends TimerTask{
public void run() {
if(mChildHandle!=null){
Message childMsg = mChildHandle.obtainMessage();
mChildHandle.sendMessage(childMsg);
Log.e("thread", i+"");
}
}
}
public void onDestroy(){
Log.i(TAG,"stop looping the child threads message queue");
mChildHandle.getLooper().quit();
}
class ChildThread extends Thread{
public void run(){
Looper.prepare();
mChildHandle = new Handler(){
public void handleMessage(Message msg)
{
Log.i("child", "11111111");
i++;
Message toMain = mMainHandle.obtainMessage();
toMain.obj = this.getLooper().getThread().getName()+ i;
mMainHandle.sendMessage(toMain);
Log.i("i=",i+"");
}
};
Looper.loop();
}
}
}
LOG如下:
08-16 08:08:12.936: ERROR/thread(235): 0
08-16 08:08:12.939: INFO/child(235): 11111111
08-16 08:08:12.939: INFO/i=(235): 1
08-16 08:08:12.939: ERROR/mainhandle(235): 1
08-16 08:08:13.239: DEBUG/dalvikvm(105): GC freed 2498 objects / 144872 bytes in 81ms
08-16 08:08:17.937: ERROR/thread(235): 1
08-16 08:08:17.940: INFO/child(235): 11111111
08-16 08:08:17.940: INFO/i=(235): 2
08-16 08:08:17.940: ERROR/mainhandle(235): 2
08-16 08:08:22.939: ERROR/thread(235): 2
08-16 08:08:22.939: INFO/child(235): 11111111
08-16 08:08:22.939: INFO/i=(235): 3
08-16 08:08:22.939: ERROR/mainhandle(235): 3
08-16 08:08:27.941: ERROR/thread(235): 3
08-16 08:08:27.941: INFO/child(235): 11111111
08-16 08:08:27.941: INFO/i=(235): 4
08-16 08:08:27.941: ERROR/mainhandle(235): 4
08-16 08:08:32.941: ERROR/thread(235): 4
08-16 08:08:32.941: INFO/child(235): 11111111
08-16 08:08:32.941: INFO/i=(235): 5
08-16 08:08:32.941: ERROR/mainhandle(235): 5
08-16 08:08:37.943: ERROR/thread(235): 5
08-16 08:08:37.943: INFO/child(235): 11111111
08-16 08:08:37.943: INFO/i=(235): 6
08-16 08:08:37.943: ERROR/mainhandle(235): 6
08-16 08:08:42.944: ERROR/thread(235): 6
。。。。。。
以上代码可以看出其执行的顺序。
转自http://www.eoeandroid.com/thread-29406-1-1.html
分享到:
相关推荐
Android 操作系统中,多线程是一种常见的编程技术,通过使用多线程,可以提高应用程序的响应速度和效率。在 Android 中,多线程可以分为两种:有消息循环的线程和没有消息循环的线程。其中,主线程(UI 线程)是一个...
Handler、Looper和Message是Android系统提供的一套用于在不同线程之间传递消息和进行同步的关键组件。本文将深入探讨如何自定义Handler、Looper来实现线程间的通信。 首先,我们了解下Handler的基本原理。Handler是...
2. Handler/Looper:创建一个后台线程,通过Handler和Looper与主线程通信,实现文件的分块上传。 3. ExecutorService:Java提供的线程池服务,可以创建固定数量的线程,适合处理并发上传任务,避免了频繁创建销毁...
本文将深入探讨Android多线程中的数据传递以及如何通过Handle实现UI更新。 首先,我们了解下Android线程的基本概念。Android应用主要运行在主线程,也称为UI线程,负责处理用户交互和更新UI。由于主线程不允许执行...
通过 Looper 对象,可以实现高效的线程间通信和消息处理,从而提高 Android 应用程序的性能和稳定性。 以下是一个使用 Looper 对象的示例代码: ```java class LooperThread extends Thread { public Handler ...
Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,使用Looper....
总的来说,实现Android多线程下载涉及网络请求、线程管理、文件操作、数据同步等多个方面。开发者需要熟悉Android的并发编程模型,了解网络编程的基础知识,并掌握文件I/O的操作。通过这样的实践,不仅可以提高应用...
本示例“android demo,实现主线程handle,工作子线程threadHandle的处理”专注于如何在主线程和子线程之间有效地进行通信。下面将详细讲解这个知识点。 1. 主线程(UI线程): 在Android中,主线程负责处理用户...
1. Handler-Looper-Messenger:通过Handler、Looper和Message对象在主线程和工作线程之间传递消息,进行同步或异步通信。 2. AsyncTask:轻量级的多线程解决方案,适合短时间的后台任务,自动管理线程生命周期,但不...
在处理媒体数据时,可能需要进行解码、渲染等复杂操作,这些操作通常在单独的线程中进行,通过`Looper`与主线程进行同步。 `Looper`的使用需要注意线程安全问题。由于`Looper`是与线程绑定的,因此在一个线程中调用...
- **CyclicBarrier和CountDownLatch**:用于同步多个线程,让它们在某个点上同步执行。 四、线程优先级 Android中可以通过`setPriority()`方法设置线程优先级,但通常不建议这样做,因为Android系统并不保证优先级...
通过Handler、Looper和Messenger,可以在工作线程和主线程之间传递消息,实现线程间的同步。 4. **Android的AsyncTask**:AsyncTask是一个轻量级的异步任务框架,它包含三个泛型参数,分别代表后台任务处理的数据...
在Android开发中,多线程是一项重要的技术,它能让应用程序同时执行多个任务,提升用户体验,尤其是在处理耗时操作如网络请求、数据计算等时。本示例“Android多线程实现简单字符串计数器”旨在教你如何在Android...
Android提供了多种实现多线程的方式,包括:Thread、AsyncTask、IntentService以及Handler/Looper机制。 Handler是Android中处理线程间通信的关键组件,它与Looper和Message紧密关联。Looper是一个消息循环,它不断...
在Android开发中,多线程是一项至关重要的技术,它能够帮助开发者实现应用程序的高效运行,尤其是在处理耗时操作如网络请求、数据加载等场景。本文将深入探讨Android多线程的相关知识点,基于“android多线程demo(很...
在Android开发中,图片动态...通过分析和学习这个示例,你可以更好地理解和掌握如何在Android中利用线程实现图片的动态效果。在实际开发中,可以根据具体需求进行调整,例如添加动画的缓动函数以实现更平滑的移动效果。
Android中的Handler机制是Android消息处理和线程通信的核心机制,它允许开发者在不同的线程间传递消息并执行相应的操作。本篇文章将详细讲解如何使用Java手写实现Android的Handler机制,以及背后的原理。 首先,...
总结一下,Android的Handler-Thread-Looper模型是多线程通信的关键,通过Handler发送消息,Thread执行后台任务,Looper负责消息的调度,共同保证了UI线程的流畅性和应用程序的高效运行。开发者应当熟练掌握这些概念...
- Android的`Looper`和`Handler`可以用来在不同线程间传递消息,实现线程间的通信,例如将本地线程的结果发送到主线程更新UI。 5. **示例:JniCallBackDemo**: - `JniCallBackDemo`可能是项目中的一个示例工程,...