Handler(二下)--MarsChen Android 开发教程学习笔记
2014-09-03 11:18
686 查看
本节主要是讲如何从MainThread 中向WorkerThread 中发送消息,WorkerThread 中的语法是特定的,需要先在复写的run() 方法中让Loop 调用prepare() 方法 ,然后将从MainThread 中接收到的信息放入handleMessage(Message msg) 方法的匿名内部类中处理。
出现的问题是,无论是否采用以下JAVA 代码注释部分还是按照教程写,都会在后台先出现WorkerThread 的消息再出现MainThread 的消息,根据线程无序的情况,我也不清楚为什么。在XML 文件中的代码:
在JAVA 文件中的代码:
出现的问题是,无论是否采用以下JAVA 代码注释部分还是按照教程写,都会在后台先出现WorkerThread 的消息再出现MainThread 的消息,根据线程无序的情况,我也不清楚为什么。在XML 文件中的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.shumin.lbs09.MainActivity" > <Button android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="BUTTON"/> </RelativeLayout>
在JAVA 文件中的代码:
package com.shumin.lbs09; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends ActionBarActivity { private Button button; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button)findViewById(R.id.button); // ButtonListener listener=new ButtonListener(); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Message msg=handler.obtainMessage(); handler.sendMessage(msg); System.out.println("onClick------>"+Thread.currentThread().getName()); } }); // button.setOnClickListener(listener); WorkerThread wt=new WorkerThread(); wt.start(); } /* class ButtonListener implements OnClickListener{ @Override public void onClick(View v) { Message msg=handler.obtainMessage(); handler.sendMessage(msg); System.out.println("onClick------>"+Thread.currentThread().getName()); } }*/ class WorkerThread extends Thread{ @Override public void run(){ Looper.prepare(); handler=new Handler(){ @Override public void handleMessage(Message msg){ System.out.println("WorkerThread------>"+Thread.currentThread().getName()); System.out.println("收到消息!"); } }; Looper.loop(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
相关文章推荐
- Handler(一)--MarsChen Android 开发教程学习笔记
- 单选按钮(作业)--MarsChen Android 开发教程学习笔记
- 文件下载 -- MarsChen Android 开发教程学习笔记
- Android 当中的线程-- MarsChen Android 开发教程学习笔记
- Animation 的Interpolator -- MarsChen Android 开发教程学习笔记
- 时间与日期--MarsChen Android 开发教程学习笔记
- Activity 生命周期(二)-- MarsChen Android 开发教程学习笔记
- SeekBar 和RatingBar --MarsChen Android 开发教程学习笔记
- Service 初步 -- MarsChen Android 开发教程学习笔记
- 广播机制 -- MarsChen Android 开发教程学习笔记
- SQLite 使用方法 -- MarsChen Android 开发教程学习笔记
- 相对布局(作业)-- MarsChen Android 开发教程学习笔记
- Animations(通过Java 代码控制) -- MarsChen Android 开发教程学习笔记
- LayoutAnimationController -- MarsChen Android 开发教程学习笔记
- Spinner -- MarsChen Android 开发教程学习笔记
- 程序调试 -- MarsChen Android 开发教程学习笔记
- Activity 生命周期(一)-- MarsChen Android 开发教程学习笔记
- App Widget -- MarsChen Android 开发教程学习笔记
- WiFi 网络操作(一)-- MarsChen Android 开发教程学习笔记
- XML 文件解析 -- MarsChen Android 开发教程学习笔记