我在asynctask里面使用toast但是实际没有提示消息,为什么
发布网友
发布时间:2022-04-25 02:14
我来回答
共1个回答
热心网友
时间:2023-10-21 00:04
Service中可以正常显示Toast,IntentService中不能正常显示Toast,在2.3系统上,不显示toast,在4.3系统上,toast显示,但是不会消失。
2. 原因
Toast要求运行在UI主线程中。
Service运行在主线程中,因此Toast是正常的。
IntentService运行在独立的线程中,因此Toast不正常。
3. 在IntentService中显示Toast
利用Handler,将显示Toast的工作,放在主线程中来做。具体有两个实现方式。
Handler的post方式实现,这个方式比较简单。
private void showToastByRunnable(final IntentService context, final CharSequence text, final int ration) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, text, ration).show();
}
});
}
Handler的msg方式实现,这个方式比较复杂。
Handler msgHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
Toast.makeText(ToastIntentService.this, msg.getData().getString("Text"), Toast.LENGTH_SHORT).show();
super.handleMessage(msg);
}
};
private void showToastByMsg(final IntentService context, final CharSequence text, final int ration) {
Bundle data = new Bundle();
data.putString("Text", text.toString());
Message msg = new Message();
msg.setData(data);
msgHandler.sendMessage(msg);
}
4. 关于耗时操作
Service中如果有耗时的操作,要开启一个Thread来做。
IntentService是在独立的线程中,所以可以进行一些耗时操作。
5. 考虑AsyncTask与Service的使用区别
如果是全后台的工作,使用Service,结果的提示可以使用Notification。
如果是异步工作,工作结束后需要更新UI,那么最好使用Thread或者AsyncTask。
我在asynctask里面使用toast但是实际没有提示消息,为什么
Service中可以正常显示Toast,IntentService中不能正常显示Toast,在2.3系统上,不显示toast,在4.3系统上,toast显示,但是不会消失。2. 原因 Toast要求运行在UI主线程中。Service运行在主线程中,因此Toast是正常的。IntentService运行在独立的线程中,因此Toast不正常。3. 在IntentService中显示Toast 利用Ha...
android线程间通信有哪些方式
1.AsyncTask机制 AsyncTask,异步任务,也就是说在UI线程运行的时候,可以在后台的执行一些异步的操作;AsyncTask可以很容易且正确地使用UI线程,AsyncTask允许进行后台操作,并在不显示使用工作线程或Handler机制的情况下,将结果反馈给UI线程。但是AsyncTask只能用于短时间的操作(最多几秒...
为什么在doInbackground更新UI线程会遇到错误
1. 我所理解迄今为止,Android是..., 我们不能从更新后台线程UI线程。 可能是他们必须从更新后台线程的UI的情况下。 其中的原因是很清楚...@OS级别会有这么多的线程将运行。 并且还 从不同的应用不同的线程,而在这种情况下,这将是混乱的屏幕上,如果我们能够从BG-线程更新用户界面 2. 所以你...
Service服务详解以及怎么使service服务不被杀死
比如想播放音乐,但只在程序运行时播放,你可能在 onCreate() 开一个线程,在 onStart() 中开启它,在 onStop() 停止它。也可以考虑使用 AsyncTask 或者HandlerThread 取代一般的线程。记住,如果使用一个服务,它还是默认在主线程中运行,如果会发生阻塞,还是要在服务中另开线程的。在manifest 文件声明服务要使用服务就...
一般Android培训学校学习课程有哪些?
2.Activity启动模式及Intent七大属性2.1 Task和Back Stack的基本概念2.2 Activity的启动模式2.3 Intent属性的特点及用法3.AsyncTask异步任务3.1 使用异步任务的必要性3.2 异步任务的用法4.ListView基本用法及适配器介绍4.1 ListView基本用法4.2 SimpleAdapter4.3 BaseAdapter5.ListView优化及分页加载数据、GridView加载网络图片、...
Service和IntentService中显示Toast的区别
Service中可以正常显示Toast,IntentService中不能正常显示Toast,在2.3系统上,不显示toast,在4.3系统上,toast显示,但是不会消失。2. 原因 Toast要求运行在UI主线程中。Service运行在主线程中,因此Toast是正常的。IntentService运行在独立的线程中,因此Toast不正常。3. 在IntentService中显示Toast 利用...