我有一个使用广播接收器启动的应用程序,我也有一个活动和一个进程,因为服务必须始终在后台运行我正在使用android:process清单标签在它自己的进程上启动服务
ui仅用于表达需求,我希望用户能够运行该服务,即使该活动未激活。
我正在使用这个额外参数启动服务:
intent.putExtra(Intent.EXTRA_DONT_KILL_APP, true);
问题是,当我按下后退按钮或主页按钮时,调用destroy方法上的活动并且服务虽然看起来正在运行(它出现在任务管理器上)但它的行为不符合预期,它应该连接到net并发送一些数据,但是每隔X次使用一个计时器任务,但任务永远不会触发,因此数据永远不会发送。
答案 0 :(得分:1)
因为服务必须始终在后台运行
请不要那样做。首先,这是不可能的,因为Android会杀了你,用户会杀了你。考虑到你在当前的实施中浪费了多少RAM,两者都会试图更快地杀死你。
我使用android:process清单标记在它自己的进程上启动服务。
请不要这样做。你在浪费RAM而没有任何好处。您无需为此服务提供单独的流程。
我正在使用这个额外参数启动服务:
该参数不符合您的想法。它不用于启动服务。
它应该连接到网络并发送一些数据,但每次X时间使用一个计时器任务,但任务永远不会触发,因此数据永远不会发送。
步骤1:摆脱现有服务。
第2步:使用AlarmManager
和WakefulIntentService
。安排一个警报(可能使用你的启动时间接收器)“每X次”调用。让WakefulIntentService
“连接到网络并发送一些数据”。
答案 1 :(得分:0)
我完全同意CommonsWare的回答。但是,如果你真的想用另一个无用的服务打扰用户,那么你可以使用以下内容: - / -
在您的活动中:
Intent serviceIntent = new Intent(this, UpdateService.class);
serviceIntent.setAction(Intent.ACTION_MAIN);
startService(serviceIntent);
在您的服务中:
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
.. do something here
}
return Service.START_STICKY;
}
同样,请不要只是为了定期执行某些操作。请使用AlarmManager!