解决方案 »
- java连接不到服务器的图片conn.getResponseCode()老返回false
- 为啥每次写这个方法eclipse都会卡死?
- 使用canvas的drawTextOnPath 在一个指定的path(我这里是一个圆)上绘制文本,怎样使文本绕着圆均匀分布呀?
- android文件上传时,界面需有提示,在线
- ProgressDialog进度条:使用ProgressDialog.show创建对象,程序出错
- android 模拟器的问题
- 求解如何实现360手机助手那种通过USB接口读取手机信息的问题
- 新手,更新Android SDK Manager问题
- android中HttpClient多线程请求报错
- 在线等,求安卓模块4G的厂家推荐
- Android中实现图片点击跳转,菜鸟在线等 急求助
- GridView出现OOM问题!!!!!
可以用AsyncTask来处理。
private TextView msgTextView;
private int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msgTextView = (TextView)findViewById(R.id.msgTextView);
incButton = (Button)findViewById(R.id.incButton);
incButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AsyncTask<Void, Void, String> thread = new AsyncTask<Void, Void, String>() {
@Override
public String doInBackground(Void... params) {
count++;
return String.format("%d", count);
}
@Override
public void onPostExecute(String msg) {
msgTextView.setText(msg);
}
};
thread.execute();
}
});
}
}
private TextView msgTextView;
private int count = 0; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msgTextView = (TextView)findViewById(R.id.msgTextView);
incButton = (Button)findViewById(R.id.incButton);
incButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new MyTask().execute();
}
});
}
private class MyTask extends AsyncTask<Void, Void, String> {
@Override
public String doInBackground(Void... params) {
count++;
return String.format("%d", count);
}
@Override
public void onPostExecute(String msg) {
msgTextView.setText(msg);
}
}
}
private MyHandler handler =new MyHandler() ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
Button b = (Button) findViewById(R.id.button);
final TextView v2 = (TextView) findViewById(R.id.t2);
new MyThread().start();
}
private class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
if(msg.what==100){
v2.setText(x++ + "");
}
}
}
private class MyThread extends Thread{
public void run() {
while(true){
handler.sendEmptyMessage(100);
}
}
}
你可以体会一下以上代码的差别和用法。public class MainActivity extends Activity { private Button incButton;
private TextView msgTextView;
private int count = 0;
private Handler handler; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msgTextView = (TextView)findViewById(R.id.msgTextView);
incButton = (Button)findViewById(R.id.incButton);
incButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new MyTask().execute();
}
});
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
msgTextView.setText((String)msg.obj);
}
};
}
private class MyTask extends AsyncTask<Void, Void, Void> {
@Override
public Void doInBackground(Void... params) {
count++;
Message msg = handler.obtainMessage();
msg.obj = String.format("%d", count);
msg.sendToTarget();
return null;
}
}
}
android里线程的使用模式有很多,要根据具体的应用场景来分别选择,所以需要对各种模式都有所了解掌握。
很奇怪你为什么会在 AsyncTask 中继续调用 Handler,而不直接实现 AsyncTask 中的onPostExecute(Object o),这个方法同样能够操作 ui 线程,并且免去对 handler 的调用?
很奇怪你为什么会在 AsyncTask 中继续调用 Handler,而不直接实现 AsyncTask 中的onPostExecute(Object o),这个方法同样能够操作 ui 线程,并且免去对 handler 的调用?
我是为了演示handler的用法。而且onPostExecute只能执行一次,而线程运行中可以利用handler可以给UI线程多次发消息,使用起来更灵活。