1.class BSTApplication extends Application
在BSTApplication类中写自己想要的方法
2.public class WorkerThread implements Runnable {
private final Object mLock = new Object();
private Looper mLooper;
private BSTApplication app;
private Thread thread;
public WorkerThread(BSTApplication app) {
this.init(app, "deault workerThread");
}
public WorkerThread(BSTApplication app, String name) {
this.init(app, name);
}
public void init(BSTApplication app, String name) {
thread = new Thread(null, this,name);
this.setApp(app);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
synchronized (mLock){
while(mLooper == null){
try{
mLock.wait();
} catch (InterruptedException ex) {}
}
}
}
@Override
public void run() {
synchronized(mLock){//同步
Looper.prepare();//线程初始化消息队列。
mLooper = Looper.myLooper();
mLock.notifyAll();
}
Looper.loop();//让线程的消息队列开始运行,可以接收消息了
}
public Looper getLooper(){
return mLooper;
}
public void quit(){
mLooper.quit();//退出消息循环
}
/**得到app*/
public BSTApplication getApp() {
return app;
}
public void setApp(BSTApplication app) {
this.app = app;
}
}
在Activity类中主线程、多线程、handler线程机制
public class AaActivity extends Activity {
private TextView ShowContent;
private Button sendbtn;
BSTApplication app;
ResultHandler resultHandler;
ActivityHandler handler;
WorkerThread work;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
app = (BSTApplication) AaActivity.this.getApplicationContext();
ShowContent = (TextView)findViewById(R.id.showcontent);
sendbtn = (Button)findViewById(R.id.send);
sendbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
resultHandler = new ResultHandler();
work = new WorkerThread(app,"Loading data");
handler = new ActivityHandler(work.getLooper(), AaActivity.this);
Message msg = handler.obtainMessage();
msg.obj = "Loading:"+"\n";
handler.sendMessage(msg);
}
});
}
/** 子线程中的Handler */
private class ActivityHandler extends Handler {
public ActivityHandler(Looper looper, Context context) {
super(looper);
}
//主意:ResultHandler不能在这个handler中声明对象
public void handleMessage(Message msg) {
super.handleMessage(msg);
Message resMsg = resultHandler.obtainMessage();
// 和服务器进行交互,得到数据,json解析
String str = msg.obj.toString() + " ActivityHandler id = "
+ Thread.currentThread().getId()+"\n";
resMsg.obj = str;
resultHandler.sendMessage(resMsg);
work.quit();
}
}
/** 与主线程交互的Handler消息机制
* 1.接收子线程中的数据 2.和ui主线程交互,刷新界面
*/
public class ResultHandler extends Handler {
@Override
public void handleMessage(Message msg) {
String StrContent = msg.obj.toString();
StrContent = StrContent + " ResultHandler id = "
+ Thread.currentThread().getId()+"\n";
ShowContent.setText(ShowContent.getText()+StrContent);
}
}
}
显示数据:Loading:ActivityHandler id = 8 ResultHandler id = 1
ActivityHandler id = 9 ResultHandler id = 1
ActivityHandler id = 10 ResultHandler id = 1
http://software.intel.com/zh-cn/blogs/2013/05/08/android-handler/?utm_campaign=CSDN&utm_source=intel.csdn.net&utm_medium=Link&utm_content=%20intelandroid%20%E2%80%93%20Handler
相关知识