我正在使用 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/