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

标签 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));
   }

}

最佳答案

I can't use startForeground(), because I am using API lvl 10. It was implemented in API 11.

startForeground() was added in API Level 5 .

My application should send every 30 minutes a UDP packet to my desktop listen server.

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

To automatically start service if the device was restarted

使用 BOOT_COMPLETED BroadcastReceiver 重新安排您的 AlarmManager 事件。

What have I done

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

关于Android:我应该使用什么来运行后台长期 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17256028/

相关文章:

multithreading - Haskell 中的 "spark"是什么

android - 谁是服务的 "client"- 上下文或 ServiceConnection?

android - 从 SD 卡浏览图像以在 android 的 ImageView 中显示它?

android - 如何实现新的Android选择模式,同时保留与Android 2.x的向后兼容性?

c# - 这个 MSDN CompareExchange 示例如何不需要 volatile 读取?

windows - 如何使用任务计划程序重新启动 Windows 服务

java - 锁定 Jar 文件,将源文件隐藏在 .jar 文件中

java - HttpUrlConnection 在 connect() 上获取响应主体

android - 如何将此文本添加到 Android Studio 中的 xml 文件中?

c# - 合并两个任务的最有效方法是什么?