Android:我应该使用什么来运行后台长期活动?

时间:2013-06-22 22:45:25

标签: android multithreading service background timer

我正在使用API​​ 10开发一个Android应用程序,我正面临一些问题。我的应用程序应该每30分钟发送一个UDP数据包到我的桌面监听服务器。我想做什么:

  • 即使应用程序已关闭(使用设备中的后退按钮),后台服务仍应保留
  • 如果设备重新启动,则自动启动服务。

我的问题:

我不能使用startForeground(),因为我使用的是API lvl 10.它是在API 11中实现的。 申请不会留在后台。

我做了什么:

public class HeartbeatService extends Service{

   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
      Log.e("er", "Started !");

      TimerTask task = new TimerTask() {

      @Override
      public void run() {
      Log.e("err", "NBOW !");
         }
      };

      Timer timer = new Timer();
      timer.schedule(task, 1000); // every 1 sec for testing

      return super.onStartCommand(intent, flags, startId);
   }   

}

使用logcat我看到只有2行生成“NBOW!”应用程序打开。

我该怎么办?

public MyActivity extends Activity{

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      startService(new Intent(this, HeartbeatService.class));
   }

}

1 个答案:

答案 0 :(得分:4)

  

我不能使用startForeground(),因为我使用的是API lvl 10.它是在API 11中实现的。

startForeground() was added in API Level 5

  

我的应用程序应该每隔30分钟将一个UDP数据包发送到我的桌面监听服务器。

使用AlarmManagerIntentService,可能是my WakefulIntentService。您不仅需要始终保持服务运行只是为了每30分钟获得一次控制权,但这样做会浪费并增加用户采取措施阻止您的应用运行的可能性

  

如果设备重新启动,则自动启动服务

使用BOOT_COMPLETED BroadcastReceiver重新安排AlarmManager次活动。

  

我做了什么

这不仅要求您浪费用户的RAM来观看时钟滴答,但如果设备处于睡眠模式(根据您的要求可能会或可能不会出现问题),它将无法工作。