1

我有一个使用广播接收器在启动时启动的应用程序,我还有一个活动和一个进程,因为该服务必须始终在后台运行我正在使用 android:process 清单标记在它自己的进程上启动该服务。

ui 仅用于演示需求,我希望即使活动不活动,用户也能够运行服务。

我正在使用这个额外的参数启动服务:

intent.putExtra(Intent.EXTRA_DONT_KILL_APP, true);

问题是当我按下后退按钮或主页按钮时,活动的销毁方法被调用并且服务虽然看起来正在运行(它出现在任务管理器上)但它的行为不像预期的那样,它应该连接到网络并发送一些数据,但每次 X 次使用计时器任务,但该任务永远不会触发,因此永远不会发送数据。

4

2 回答 2

1

因为服务必须始终在后台运行

请不要那样做。对于初学者来说,这是不可能的,因为 Android 会杀了你,而用户也会杀了你。考虑到您在当前实现中浪费了多少 RAM,两者都会试图更快地杀死您。

我正在使用 android:process manifest 标签在它自己的进程上启动服务。

请也不要那样做。你浪费内存没有任何好处。此服务不需要单独的进程。

我正在使用这个额外的参数启动服务:

该参数不会像您认为的那样做。它不与启动服务一起使用。

它应该连接到网络并发送一些数据,但每次 X 次使用计时器任务但该任务永远不会触发,因此永远不会发送数据。

第 1 步:摆脱现有服务。

第 2 步:使用AlarmManagerWakefulIntentService. 安排一个警报(可能使用您的启动时间接收器)以“每 X 次”调用。有WakefulIntentService“连接到网络并发送一些数据”。

于 2010-11-07T00:48:12.087 回答
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;
}

同样,请不要这样做只是为了定期执行某些操作。请使用警报管理器!

于 2013-09-04T12:11:57.587 回答