• Service(二)


    Mainfest代码清单:

    <serviceandroid:enabled="true"android:label="DummyService"android:name=".DummyService">

            <intent-filter>

            <actionandroid:name="org.demo.DummyService"/>

            </intent-filter>

    一、使用Service和Broadcast更新UI界面

    Service类:

    public class ServiceUIService extends Service{

            public static final String SERVICEUI_SERVICE = "com.cmd100.serviceui";

            

            @Override

            public IBinder onBind(Intent intent) {

                    // TODO Auto-generated method stub

                    return null;

            }

            

            @Override

            public void onCreate() {

                    //发送0显示ProcessDialog

                    updateProgressDialogValue(0);

                    //在新线程里处理业务,防止影响主线程界面显示,测试时发现如果通过handler来处理会导致ProcessDialog界面假死

                    thread.start();                

                    super.onCreate();

            }

            private void updateProgressDialogValue(int value){

                 //利用service发送广播

                    Intent i = new Intent(SERVICEUI_SERVICE);

                    Bundle b = new Bundle();

                    b.putInt("ProgressDialogValue", value);

                    b.putString("data", "此程序应该可以符合你要求了,其实关键点就是在services里要新开线程去处理业务和广播发送即可。如果不开新线程的话,的确会影响主Activity的界面显示。其实不用广播也可以达到要求,我做的程序里也要通过service的执行情况,去更新启动它的activity,我用了全局对象,service会对全局对象里的变量进行更新,然后activity里使用handler查看全局对象中变量的状态,然后再来更新UI");

                    i.putExtras(b);

                    sendBroadcast(i);

            }

            

            private Runnable doYourWorkInService = new Runnable() {                        

                  public void run() {

                                    //模拟一段时间的数据处理操作

                                    long count =0;

                    do {

                            count ++;

                    } while (count<3000);

                    try {

                      Thread.sleep(5000);

                  } catch (InterruptedException e) {

                      // TODO Auto-generated catch block

                      e.printStackTrace();

                  }

                    //业务操作完成后再发广播

                    updateProgressDialogValue(100);

                    }

                    };

                    

            Thread thread = new Thread(doYourWorkInService);

    }

  • 相关阅读:
    如何理解Linux中的load averages?
    如何准备Java初级和高级的技术面试
    大数据java基础吗?
    如何写出没有BUG的代码
    求强连通分量Tarjan算法
    图论_连通_连通分量
    欧拉函数
    二分图,匈牙利算法
    网络流24题(更新中
    一些简单二分题,简单的hash,H(i),字符串题
  • 原文地址:https://www.cnblogs.com/itfenqing/p/4429520.html
Copyright © 2020-2023  润新知