android中的线程(三上)

来源:互联网 发布:软件过程财富库 编辑:程序博客网 时间:2024/05/22 10:41

转载请注明出处:http://blog.csdn.net/u011569040/article/details/45081347

主要内容:

1.如何下载Android源代码

2.ThreadLocal初步介绍

3.Handler相关代码执行流程



Sources for Android SDK就是源代码

然后到电脑的D:\Android\Android SDK\sources\android-19,找到源代码






三(中)主要内容:

1.Looper当中的Loop()方法的作用

2.什么是Message对象的Target

3.处理一个Message的方法


三(下)主要内容:

1.Handler的post(Runnabler)方法

2.Runnable的运行机制

3.post方法和sendMessage方法的区别


import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;//private static Message getPostMessage(Runnable r)//1.该方法完成了两个操作,第一生成了一个Message对象,第二将r对象赋值给Message对象的callback属性//第一个问题,如何能够把一个Runnable对象放置在消息队列当中?实质上是生成了一个Message对象,并将r赋值//给Message对象的callback属性,然后再将Message对象放置在消息队列当中//第二个问题,Looper取出了携带了r对象的Message对象后,干了些什么?取出Message对象之后调用了dispatchMessage//方法,然后判断Message的callback属性是否为空,此时的callback属性有值,所以执行了handleCallback(Message msg)//在该方法当中执行了msg.callback().run();public class MainActivity extends Activity {private Button button;private TextView textview;private Handler handler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textview=(TextView) findViewById(R.id.textview);button = (Button)findViewById(R.id.buttonId );button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {TestThread tt = new TestThread();tt.start();}});}class TestThread extends Thread{@Overridepublic void run() {super.run();Runnable r = new Runnable() {@Overridepublic void run() {//当前线程的名称为main,说明这个Runnable是运行在主线程里面的System.out.println("当前线程的名称"+Thread.currentThread().getName());//这里可以写上更新UI的代码}};//post(r)方法将r对象放置在消息队列当中,Looper(主线程中)从消息队列当中取出了r对象//我们的猜测是:取出r对象之后//1.Thread t = new Thread(r)//2.t.start()//根据测试的结果可以看出,该思路是错误的//我们的问题是Looper取出了r对象之后,干了些什么?handler.post(r);}}}


0 0
原创粉丝点击