备忘
1:这段代码中除了main线程,就是MyThread线程,除了在MyThread实现的东西外,其他的都算是在main线程中
2:代码流程
点击Button-->调用workThread:workThread实现的是把获得的数据发送出来->msg被发送到消息队列中去了,由looper取出后在UI线程的handMessage()方法中处理。例如更新UI.---handMessage()方法在主线程中,所以可以更新UI.
3:
注,我把
String s = "从网络中获取的值";//从SDcard读取数据等
Message msg = mHandler.obtainMessage();
msg.obj = s;
mHandler.sendMessage(msg);
写到run方法体外了,然后就提示
Multiple markers at this line
- Syntax error on token , misplaced construct
- Syntax error on token "msg", VariableDeclaratorId expected after
this token
package com.example.undertest;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
@SuppressLint("HandlerLeak")
public class UnderTest extends Activity {
Button button = null;
TextView textView = null;
myHandler mHandler = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_under_test);
button = (Button) findViewById(R.id.button);
textView = (TextView) findViewById(R.id.testview);
mHandler = new myHandler();
// 在button的监听器中启动workThread,点击button,启动mThread线程
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MyThread mThread = new MyThread();
mThread.start();
}
});
}
class myHandler extends Handler {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
String s=(String)msg.obj;
textView.setText(s);//更新UI
}
}
// 对控件的操纵只能放在UI线程中,不能放到workThread中,workTread一般是处理后台的事情。例如网络数据的请求,获取
class MyThread extends Thread {
@Override
public void run() {
// 线程启动后,让线程休眠2秒钟
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String s = "从网络中获取的值";//从SDcard读取数据等
Message msg = mHandler.obtainMessage();
msg.obj = s;
mHandler.sendMessage(msg);// msg被发送到消息队列中去了,由looper取出后在UI线程的handMessage()方法中使用
}
}
}