Android中Thread的使用之Handler机制

Android中子线程和java中的swt插件一样,也是不能直接操作主线程的数据的,相对于java中的异步调用,Android线程中采用了一种Handler消息机制,来实现此功能。

通俗的来说的话其原理也不难,首先主线程在运行,子线程也在运行,那么在主线程和子线程中间有一个叫MessageQueue的队列,子线程把要在主线程中显示的数据存在Message中,然后再通过haddler将消息发送到消息队列中,主线程中通过android系统自身对应的时间(具体看其机制),去消息队列中,根据存进去的编号取得相应的值,达到数据的交互作用。

具体的测试代码如下:

public class Main2Activity extends Activity {public static final int INSCODE=1;private TextView tv4;private TextView tv5;//handler:从队列中取出来数据,这是android系统自己完成的,具体多久去拿一次数据不清除private Handler handler=new Handler(){public void handleMessage(Message msg) {switch (msg.what) { //编号,用来区分是什么的,时间还是别的case 1:String time=(String)msg.obj;//obj:取得的对象tv5.setText(time);break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//获取跳转之前的意图Intent intent=super.getIntent();String uname=(String)intent.getExtras().get("uname");TextView tv1=(TextView) super.findViewById(R.id.textView1);tv4=(TextView) super.findViewById(R.id.textView4);tv5=(TextView) super.findViewById(R.id.textView55);tv1.setText("欢迎您:"+uname);Buttonbtn=(Button) super.findViewById(R.id.button1);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Intent intent=new Intent(Main2Activity.this,LoveActivity.class);//注意这里不同,打开后面页面的方法不一样,因为要接收后面页面回传的结果Main2Activity.this.startActivityForResult(intent, INSCODE);}});new Thread(new Runnable() {@Overridepublic void run() {while(true){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}Date d=new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");String t=sdf.format(d);//将时间存到Message对象中,再通过haddler将消息发送到消息队列即可Message m=new Message();m.what=1;m.obj=t;//发到消息队列中handler.sendMessage(m);}}}).start();}@Override //当新窗口操作完(finish()新窗口必须要操作完才能回调这个方法),则会回传数据,回传的结果会由androind系统自动回调到这个方法protected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case INSCODE:if(resultCode==RESULT_OK){String result=(String)data.getExtras().get("result");Log.i("测试", result);tv4.setText(result);}break;}super.onActivityResult(requestCode, resultCode, data);}}

总的来说,android学习线程的入门还是不难的,但是要到更深层次还是要好好的静心学习,,加油

版权声明:本文为博主原创文章,未经博主允许不得转载。

我也相信爱可以排除万难;只是,万难之后,又有万难。这是我更相信的。

Android中Thread的使用之Handler机制

相关文章:

你感兴趣的文章:

标签云: