Looper.prepare()和Looper.loop(),在子线程中更新UI

当子线程想直接更新UI时,例如进行Toast提示。

可以先Looper.prepare(),然后Looper.loop(),代码如下(加黑处):

public class CrashHandler implements UncaughtExceptionHandler {
	TApplication tApplication;

	public CrashHandler(TApplication tApplication) {
		super();
		this.tApplication = tApplication;
	}

	@Override
	public void uncaughtException(Thread thread, Throwable ex) {
		StringWriter stringWriter = new StringWriter();
		PrintWriter printWriter = new PrintWriter(stringWriter);
		ex.printStackTrace(printWriter);
		String string = stringWriter.toString();
		Log.i("tedu1", "出错了4 " + string);
		// 启工作线程,toast是界面控件
		// 工作线程不能更新UI
		<strong>new Thread() {
			public void run() {
				// show用到队列 主线程有looper,取消息放队列
				Looper.prepare();
				Toast.makeText(tApplication, "网络不稳定,程序即将重启", Toast.LENGTH_SHORT).show();
				Looper.loop();

			};
		}.start();
</strong>
		try {
			Thread.currentThread().sleep(2000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Intent intent = new Intent(tApplication, MainActivity.class);
		// 不执行
		PendingIntent pendingIntent = PendingIntent.getActivity(tApplication, 100, intent,
				Intent.FLAG_ACTIVITY_NEW_TASK);

		// 过一会执行pendingIntent
		AlarmManager alarmManager = (AlarmManager) tApplication.getSystemService(Context.ALARM_SERVICE);
		alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 200, pendingIntent);
		tApplication.finish();

	}

}

代码出自跑跑项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值