Android中Handler小例子

     在Android中,如果你的应用有一段时间响应不够灵敏,系统会向用户显示一个称作为应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。一个合理的APP中不能也不应该出现ANR。导致原因就是安卓UI主线程中不能进行耗时操作(网络请求,文件下载等),比如在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒,否则ANR就会不期而遇。这时我们就要用到异步处理工具Handler主要是按计划发送消息或执行某个Runnanble,从非UI线程中发送来的消息放入消息队列中,然后通过处理消息更新UI线程)。

例子1,用Handler来更新UI线程:

public class HandlerActivity extends Activity {
public static final int HANDLER_MESSAGE = 1;
private TextView mContentTv;
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case HANDLER_MESSAGE:
mContentTv.setText("此时更新了数据");
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContentTv=(TextView) findViewById(R.id.t_title);
}
class myThread implements Runnable {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
Message message = new Message();
message.what = HANDLER_MESSAGE;
mHandler.sendMessage(message);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
}

例子1,用Handler来完成定(周期性)操作(当然可以用Timer,TimerTask及Android自带的AlarmManage):

public class HandlerActivity extends Activity {
private TextView mContentTv;
private Handler handler = new Handler();
private int mCounter = 0;
private Runnable mRunnable = new Runnable() {
public void run() {
handler.postDelayed(this, 5000);// 5秒后操作
mCounter++;
mContentTv.setText("Count: " + mCounter);


}
};


@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContentTv = (TextView) findViewById(R.id.t_title);
handler.post(mRunnable);
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Handler 是一种用于处理异步消息以及与线程通信的机制。Handler 可以被用于在主线程执行任务,也可以被用于在其他线程执行任务。 当你创建一个 Handler 对象时,它会与当前线程的消息队列相关联。通过使用 Handler,你可以向消息队列发送消息,并且可以定义一些回调方法来处理这些消息。当消息被处理时,它们会被发送到指定的 Handler 对象,并且会在该对象的消息队列按照顺序进行处理。 在 Android 应用程序,通常会使用 Handler 来执行一些耗时的操作,例如从网络获取数据或者从数据库读取数据等。这些操作需要在后台线程执行,以避免阻塞 UI 线程。 使用 Handler 的基本步骤如下: 1. 创建 Handler 对象,并将其与当前线程的消息队列相关联 2. 向 Handler 对象发送消息,以便在消息队列执行某些操作 3. 在 Handler 对象定义回调方法,以便在消息被处理时执行相应的操作 例如,下面的代码演示了如何使用 Handler 显示一个 Toast 消息: ``` Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Hello World", Toast.LENGTH_SHORT).show(); } }); ``` 在这个例子,我们创建了一个 Handler 对象,并将其与主线程的消息队列相关联。然后,我们使用 post() 方法向消息队列发送一个消息,这个消息会触发一个 Runnable 对象的 run() 方法。在 run() 方法,我们显示了一个 Toast 消息,该消息会在主线程被执行。由于我们使用了 Handler,所以这个操作可以在后台线程执行,而不会阻塞 UI 线程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值