【问题标题】:keeping background service alive after user exit app [duplicate]用户退出应用程序后保持后台服务活动[重复]
【发布时间】:2013-07-20 00:27:00
【问题描述】:

我正在尝试创建一个服务,即使在用户从正在运行的进程菜单关闭应用程序后(通过将进程移出屏幕),它也会为我执行后台作业。

我试图做的是通过像这样声明它在不同的进程中创建服务:

  <service
        android:name=".service.Service"
        android:enabled="true"
        android:icon="@drawable/ic_launcher"
        android:process=":my_process" >
  </service>

onStartCommand() 是:

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

【问题讨论】:

  • 您好,您有解决方案吗?我一直在寻找几个小时来解决这个问题,但我无法找到解决方案。你的代码和我的一模一样。
  • 我已经解决了这个问题,只需使用以下行启动我的服务:ContextWrapper cont = new ContextWrapper(getBaseContext()); cont.startService(service);
  • 如果您显示来自该服务的通知,它将阻止操作系统杀死它

标签: android service android-service background-service


【解决方案1】:

根据Android documentation,您可以通过使用属性来实现此行为:

 android:isolatedProcess="true"

顺便说一句,我知道它没有回答问题,但它也可能对某些人有所帮助 - 最近,我发现了 Evernote 开发人员创建的一个很棒的第三方库。它的名字是Android-Job,它的目的是创建在不同进程上运行的作业,即使在设备重启后也可以再次激活,这太棒了。

【讨论】:

  • 这个库很老了。用起来会好吗?
  • 是的,我们正在广泛使用它。不确定,但我认为它时不时会收到新的提交
  • 在 Oreo 上添加了 isolatedProcess=true 后,服务似乎还没有启动:(
  • 最新的安卓版本还能用吗?
  • @Ahmad 抱歉回复晚了。我不知道。几年前我放弃了这个项目
【解决方案2】:

实际上,您可以实施不同种类的服务。使用服务而不是 IntentService。您需要查看START_STICKYSTART_NOT_STICKYSTART_REDELIVER_INTENT,即使您的活动终止,您也可以让您的服务在后台运行。 Android services 也看AIDL 服务

【讨论】:

  • 我使用了START_REDELIVER_INTENT,但是当用户关闭应用时我的服务仍然停止。
  • 我使用了START_STICKY,但即使应用程序被用户强制关闭,我的服务仍然停止。
【解决方案3】:

为此,您可以使用 Handler 和 Runnable 类

   @Override
    public void onCreate()
    {

        Toast.makeText(context, "SMS SERVICE START", Toast.LENGTH_SHORT).show();


        handler=new Handler();
        runnable=new Runnable() {
            @Override
            public void run()
            {

                    TASK();
                    handler.postDelayed(runnable,180000);
// 3min delay
            }
        };

        handler.postDelayed(runnable,180000);
        super.onCreate();
    }

这个任务连续运行3分钟

public void TASK()
{
     //your task 

}

【讨论】:

    【解决方案4】:

    服务被设计为在后台运行,无需其他进程。

    来自服务文档:

    一旦启动,服务可以无限期地在后台运行,即使启动它的组件被销毁。

    但是,服务应该在其工作完成后自行停止。 IntentService 是开始实施服务的最简单方法。

    【讨论】:

    • 是的,我看到了这条线,但每次我关闭应用程序时,服务也会被破坏。顺便说一句,我不知道这是否重要,但服务实现 OnSensorListener 来监听加速度计的变化(运动..)
    • @powerX 如何启动服务?您是绑定到它还是使用startService
    • 我正在使用 startService 来启动我的服务
    • @powerX 抱歉,不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多