`
zfzaizheli
  • 浏览: 46287 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

【android】通过handle,looper实现多线程数据同步

阅读更多
代码如下:

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-Handle-Thread.rar_android_handle thread

    在Android应用开发中,线程(Thread)和Handler是两个至关重要的概念,它们共同负责处理应用程序的多任务执行和UI更新。本资料“Android-Handle-Thread....通过学习和实践,开发者能够更自如地应对复杂的多线程场景。

    android demo,主线程handle

    `Handle` 和 `Runnable` 是Android多线程编程中的重要概念,它们允许开发者在不同的线程之间同步数据和执行任务。`Handle` 提供了一种消息处理机制,而`Runnable` 是一个接口,定义了代码块的执行逻辑。接下来,我们...

    android开发教程之handle实现多线程和异步处理

    在Android开发中,多线程和异步处理是至关重要的技术,特别是在处理耗时操作如网络请求、数据加载等场景。Handler是Android提供的一种机制,用于在不同的线程间通信,特别是主线程(UI线程)与工作线程之间。在...

    android demo,test印_handle_message_obtainMessage,消息处理和函数名和行号的打

    在Android开发中,消息处理是应用中不可或缺的一部分,主要用于线程间通信,特别是UI线程与后台线程之间的数据同步。`handle_message_obtainMessage`这个主题涉及到的是Android中的Handler机制,它允许开发者在不同...

    线程和消息处理

    因为Android不允许多线程直接修改UI,所以我们通常在工作线程中处理耗时操作,然后通过`Handler`向主线程发送消息,主线程的`Handler`收到消息后更新UI。 总结起来,线程和消息处理是Android应用并发编程的基础,...

    Android Handler 机制实现原理分析

    总结来说,Android Handler机制是通过主线程的Looper不断检查MessageQueue,取出消息并分发给对应的Handler来实现线程间的通信。这个过程涉及到多个关键组件的协作,包括ActivityThread、Handler、MessageQueue、...

Global site tag (gtag.js) - Google Analytics