handler的使用情况:
1、出现网络连接交互问题是,使用handler处理。
2、在出现数据传输的时候,运用handler处理
3、在处理子线程上问题是,只能运用handler处理数据上的传输,把需要进行的业务处理问题传到主线程上处理。
...
主要进行第3点解释:
在运行android程序是,开始启动一个主线程,当有一个Runnable运行是,会相应的开启一个子线程,如果想要在子线程上进行相应的业务处理,如Toast输出操作时,会发现输出不出来,现在的问题是,你需要用handler把相应的业务处理转到主线程上进行(即你的当前运行的Activity上)
但是你会面临的是问题是,如果你生命的Runnable不是在你的Activity内部,而是单独的声明了一个类上,你现在需要把当前的handler声明为静态static的,才能解决问题。
如下代码:
再同一个Activity下实现:
public class MyTestActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
runnable.run();
}
Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Bundle bundle = msg.getData();//可以拿到绑定的数据,进行相应的业务处理
Toast.makeText(MyTestActivity.this, "相应的业务处理", Toast.LENGTH_SHORT).show();
}
};
Runnable runnable = new Runnable() {
@Override
public void run() {
Message message = new Message();
Bundle bundle = new Bundle();
//bundle 可以相应的绑定所需要传输的数据
message.setData(bundle);
myHandler.handleMessage(message);
}
};
}
package org.androidpn.handler;
import android.os.Bundle;
import android.os.Message;
public class MyRunnable implements Runnable{
@Override
public void run() {
Message message = new Message();
Bundle bundle = new Bundle();
//bundle 可以相应的绑定所需要传输的数据
message.setData(bundle);
MyTestActivity.myHandler1.handleMessage(message);
}
}
<pre name="code" class="java">public class MyTestActivity extends Activity {
private static Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
context = this;
runnable.run();
}
public <span style="color:#ff0000;">static</span> Handler myHandler1 = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Bundle bundle = msg.getData();// 可以拿到绑定的数据,进行相应的业务处理
Toast.makeText(context, "相应的业务处理", Toast.LENGTH_SHORT).show();
}
};
}
问题应该解决清楚了。