博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android] Service和IntentService中显示Toast的区别
阅读量:7250 次
发布时间:2019-06-29

本文共 1437 字,大约阅读时间需要 4 分钟。

1. 表象
    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 duration)     {        Handler handler = new Handler(Looper.getMainLooper());        handler.post(new Runnable() {            @Override            public void run() {                Toast.makeText(context, text, duration).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 duration) {        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。
6. 参考
   
   
    

转载地址:http://xxqbm.baihongyu.com/

你可能感兴趣的文章
python之rabbitMQ
查看>>
sys和shutil
查看>>
Django模板——html转义
查看>>
数理统计总结篇第一章
查看>>
javascript开发模式
查看>>
Docker底层技术
查看>>
明全策:黄金波段上攻1345一线,1.24现货伦敦金分析策略
查看>>
【小松教你手游开发】【unity实用技能】unity ngui wp8上使用动态字体消失或碎片化的问...
查看>>
【小松教你手游开发】【unity实用技能】yiled return null在unity中的作用
查看>>
RAC 12.1
查看>>
跳转控制器用 push 还是 modal,怎么选择?
查看>>
第二周学习总结
查看>>
linux shell基本特性
查看>>
oracle 启动阶段
查看>>
要听 1001 个支付故事,这次你估计不用花钱
查看>>
软件测试人员应该得到实时生产错误的责任吗?
查看>>
.net快速开发平台搭建实例,工作流、代码生成、移动app等
查看>>
Jetty源码学习9-WebSocket
查看>>
积米浏览器下载|积米浏览器免费下载
查看>>
PHPStorm 新手教程
查看>>