当前位置: 首页 > 知识库问答 >
问题:

Android P:服务行为改变

云洋
2023-03-14

我最近在摆弄最新的Android P版本,试图运行一个带有start_sticky标志的简单服务。基本上,这就是我的设置:

MainActivity.java

public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstance) {
        Intent intent = new Intent(this, MyService.class);
        startService(intent);
    }
}
public class MyService extends Service {
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate()");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy()");
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        Log.d(TAG, "onTaskRemoved()");
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        Log.d(TAG, "onLowMemory()");
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "onStartCommand()");
        return START_STICKY;
    }
}
    null

现在,从recents菜单中删除应用程序后:

这是我所期望的行为。但当我在运行Android P DP4的更新手机上启动应用程序时,生命周期如下所示:

关于Android P

    null

提前感谢!

共有1个答案

阎渝
2023-03-14

你正在寻找错误的Android版本的行为变化。Android Oreo引入了后台执行限制,将服务限制在后台。TL;DR:在后台启动服务将引发IllegalStateException,改用Jobs

 类似资料:
  • 我刚开始学习Java多线程。我从这个简单的代码开始,但是似乎从未实现。 我希望“任务执行”结果应该被打印出来,但我得到了一个空控制台。 下面是我的简单类:

  • 问题内容: 我已经用Java构建了一个小守护进程,我想在Unix(例如Debian 5)下作为服务运行它。我读过有可能使用Java包装器,但是难道没有其他更容易实现的选项吗?我不能只使用Unix命令吗? 问题答案: 好吧,即使您退出外壳程序也要运行Java程序,以下是最简单的方法:

  • 简述 Swoft 拥有便捷的命令行工具和相应的服务管理命令,参阅 Swoft Devtool 了解更多。 HTTP 服务 # 启动 HTTP 服务 $ php ./bin/swoft http:start # 以守护进程模式启动 $ php ./bin/swoft http:start -d # 重启 HTTP 服务 $ php ./bin/swoft http:restart # 重新加载

  • 问题内容: 我想在侦听器中指定可侦听的默认端口。是否有比在内部解析并插入配置的端口更容易的修复方法? 目标是运行时不必每次都指定地址和端口,而要从中获取参数。 问题答案: 使用以下命令创建一个bash脚本: 将其保存为runserver并与manage.py放在同一目录中 并运行为

  • 想改进这个问题吗?更新问题,使其成为Stack Overflow的主题。 我的系统上运行着一个本地mysql服务器,我试图从一个sqldump文件加载一个大规模的现有数据库。 大约一个小时后(左右)我第一次尝试这个,我得到了以下错误 看来我可以通过增加 命令行选项来解决这个问题。 我的问题是-如何将mysql服务器作为服务启动并在Ubuntu中传递命令行选项? 要正常启动和停止,我使用 但是在这里

  • 如何在生产环境中将hazelcast服务器作为linux服务运行? java-server-cp hazelcast。jar com。黑兹卡斯特。例子。StartServer StartServer运行带有输出到std终端的服务器,将其作为linux服务运行并将日志写入文件的最简单方法是什么 我必须将其设置为EC2实例中的服务并将其捆绑。当EC2自动缩放启动实例时,hazelcast服务器将启动并