2011-11-03 37 views
0

在我的应用程序中,每隔30秒我必须从网络重新加载内容。问题是这个功能在一段时间内工作正常,但之后(或者当设备处于待机状态时)内容在5秒7秒后在不同的时刻重新加载,我不明白为什么发生。每隔X秒从网络获取数据

这里是我的代码:

onCreate()方法:

 handler1 = new Handler(); 
     t1 = new Timer(); 
     doReload1(); 

其中doReload1()是:

public void doReload1() { 

     scanTask1 = new TimerTask() { 
      public void run() { 
       handler1.post(new Runnable() { 
        public void run() { 
         System.out.println("Every 30 sec getPlaylist");      


        } 
       }); 
      } 
     }; 

     t1.schedule(scanTask1, 300, 30000); 
     try { 
      GetPlaylists(); //method for get data from web 
     } catch (Exception e) { 
      System.out.println("You are in catch"); 
     } 
    } 

回答

1

任务的活动,而手机处于待机模式下,它不会起作用。即使手机处于待机状态,也希望检索数据,请使用服务。

+0

服务也同时设备处于休眠模式时不运行。你需要购买WakeLock:http://developer.android.com/reference/android/os/PowerManager.html –

3

要做的最好的事情是使用AlarmManager,因为它将代表您处理所有需要的东西,以便在手机睡着时运行任务。在Google提供的ApiDemos中有一个使用这种技术的演示。

简而言之,您可以让IntentService从AlarmManager捕获PendingIntent,然后下载Web数据。然后,您的活动可以抓住这个数据,每当它想要刷新其数据。或者,由于新数据可用,您的服务可能会向活动发送信号以实际更新自身。

编辑

Direct link to google example of using Alarms

+0

你能否给我一个简单的例子?我发现这个http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/ – Gabrielle

+0

我添加了一个到Google API演示的直接链接。他们展示了如何启动服务等。在AlarmService_Service内部,它们产生了一个什么都不做的线程。你可以做同样的事情,但实际上在那个任务中执行你的下载。然后可能发送一个广播意图到您的活动,告诉它更新自己。我会建议使用IntentService而不是像google的例子那样的常规服务,这样你就不必亲自产生线程了。 –