1

我正在使用 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));
   }

}
4

1 回答 1

4

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

startForeground()在 API 级别 5 中添加

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

使用AlarmManager和一个IntentService,可能是我的WakefulIntentService。您不仅不需要为了每 30 分钟控制一次服务而一直运行服务,而且这样做很浪费,并且会增加用户采取措施阻止您的应用程序运行的可能性。

设备重启后自动启动服务

使用 aBOOT_COMPLETED BroadcastReceiver重新安排您的AlarmManager活动。

我做了什么

这不仅需要您浪费用户的 RAM 来观察时钟滴答声,而且如果设备处于睡眠模式(这可能是也可能不是问题,取决于您的要求),它将无法工作。

于 2013-06-22T22:50:39.170 回答