zoukankan      html  css  js  c++  java
  • [Android] Service和IntentService中显示Toast的区别

    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. 参考


  • 相关阅读:
    启动docker 服务时 虚拟机端口转发 外部无法访问
    ADC滤波处理的十种方法
    ubuntu卸载软件
    Cannot fetch index base URL http://pypi.python.org/simple/
    pip命令详解
    QT入门
    tensorflow学习-第一章
    opencv学习-第一章
    二叉树详解
    C/C++内存地址划分
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3225944.html
Copyright © 2011-2022 走看看