zoukankan      html  css  js  c++  java
  • 开启周期性的线程操作

    在开发过程中,碰到这么一种需求,需要在后台开启一个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即可。

  • 相关阅读:
    软件测试第三次作业
    第一次实验 Junit简单test三角形的小程序
    软件测试[2]falut error failure 的区别与理解
    java中使用jxl的jar包处理excel的复制,更新等问题。
    java中== 和 .equals()的区别
    c# 规格说明书
    c#第九课 linq stream(2)
    c# 第八课 linq stream
    c# 第七课 NET 框架的正则表达式类
    矩阵模版(新)
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3010053.html
Copyright © 2011-2022 走看看