• 开启周期性的线程操作


    在开发过程中,碰到这么一种需求,需要在后台开启一个service服务,每隔一个小时请求一次网络数据,并更新桌面的widget组件。

    可行的方法有两种:

    1,借助于定时器。在service的oncreate方法中

    timer=new Timer();
            timer.schedule(new TimerTask(){
                @Override
                public void run() {
                    //因为service是在后台运行,并不存在ui阻塞的问题,因此可以不另开一个线程去请求网络信息                
                    place = getSharedPreferences("SP", Activity.MODE_PRIVATE)
                            .getString("name", "xcgy");
                    try {
                        new SendRequest().getLevelInfo(Constant.LevelInfoURL
                                + place, levelInfoSp, Constant.LevelKey);
                        // 发送广播通知appwidget进行更新
                        Intent intent = new Intent("wyf.action.aqi_upadte");
                        RefService.this.sendBroadcast(intent);
                        Thread.sleep(3600000);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    
                }
                
            }, 0, 3600000);

    然后在service的ondistory方法中将定时器关闭。
    timer.cancle();

    2,借助线程休眠和标志位

    初始化的时候将flag设置为true。在service的oncreate方法中:

        while (flag) {
                    //因为service是在后台运行,并不存在ui阻塞的问题,因此可以不另开一个线程去请求网络信息                
                    place = getSharedPreferences("SP", Activity.MODE_PRIVATE)
                            .getString("name", "xcgy");
                    try {
                        new SendRequest().getLevelInfo(Constant.LevelInfoURL
                                + place, levelInfoSp, Constant.LevelKey);
                        // 发送广播通知appwidget进行更新
                        Intent intent = new Intent("wyf.action.aqi_upadte");
                        RefService.this.sendBroadcast(intent);
                        Thread.sleep(3600000);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
                }


    在service的ondistory方法中只需要将标志位设置为false即可。

  • 相关阅读:
    python面试的100题(12)
    python面试的100题(11)
    python面试的100题(10)
    python面试的100题(9)
    python面试的100题(8)
    python面试的100题(7)
    纯js做鼠标拖拽物体并记录鼠标位置的效果(附pageX clientX offsetX screenX的区别图)
    利用function函数做一个简易计算器(getElementById)
    JavaScript中的函数function
    初识JavaScript
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3010053.html
Copyright © 2020-2023  润新知