Android 无障碍服务
Android Accesibility Service
任何人都可以解释一下假设我有一个由我的应用程序定义的辅助功能服务。当向应用程序授予辅助功能权限时,它开始 运行。假设由于某种原因内存问题服务停止。我怎样才能让服务重新启动找不到任何方法来做到这一点。请帮忙
非常感谢你
嗨,Oblivion,直到今天我才开始提问,我以前只是参考 Stack Overflow :-)。抱歉,我会确保提供完整的描述。现在我的问题。
我在想两种办法
- 作为粘性服务启动
- 运行 不同进程中的服务
第一种方法 -> 假设应用程序崩溃并且由于它是粘性的事实它重新启动并且由于之前崩溃的一些错误它再次崩溃并出现一些异常之后 Android 将不会启动服务
可能的解决方案 -> 使服务逻辑尽可能无错误
第二种方法 -> 运行 与 http://mindtherobot.com/blog/37/android-architecture-tutorial-developing-an-app-with-a-background-service-using-ipc/ 不同的进程中的服务
并确保您采用了第一种方法中提到的所有解决方案。
我所做的所有这些事情正在解决我的问题。
我最初的问题是假设我已经将一个客户端绑定到辅助功能服务,并且我已经知道我的辅助功能服务不是 运行,有没有一种方法可以触发一个意图并告诉Android 启动我的辅助功能服务。
我需要这样做是因为我想控制我的辅助功能的生命周期而不是 Android。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
//your code!!!
// If we get killed, after returning from here, restart
return START_STICKY;
}
像上面那样更改您的 return statement
。它将再次重新启动您的服务。
START_NOT_STICKY
如果系统在 onStartCommand() return 秒后终止服务,请不要重新创建服务,除非有待交付的意图。这是最安全的选择,可以在不必要时避免 运行 您的服务,并且您的应用程序可以简单地重新启动任何未完成的作业。
START_STICKY
如果系统在 onStartCommand() return 秒后终止了服务,则重新创建服务并调用 onStartCommand(),但不要重新传送最后一个 Intent。相反,系统调用 onStartCommand() 时带有一个空意图,除非有未决的意图来启动服务,在这种情况下,这些意图会被传递。这适用于不执行命令但 运行 无限期等待作业的媒体播放器(或类似服务)。
START_REDELIVER_INTENT
如果系统在 onStartCommand() return 秒后终止服务,请重新创建服务并使用传递给服务的最后一个意图调用 onStartCommand()。任何未决的意图依次交付。这适用于正在积极执行应立即恢复的工作的服务,例如下载文件。
我们可以 return 以上任何一项,具体取决于我们的要求。
来源:Here!!!
任何人都可以解释一下假设我有一个由我的应用程序定义的辅助功能服务。当向应用程序授予辅助功能权限时,它开始 运行。假设由于某种原因内存问题服务停止。我怎样才能让服务重新启动找不到任何方法来做到这一点。请帮忙
非常感谢你
嗨,Oblivion,直到今天我才开始提问,我以前只是参考 Stack Overflow :-)。抱歉,我会确保提供完整的描述。现在我的问题。
我在想两种办法
- 作为粘性服务启动
- 运行 不同进程中的服务
第一种方法 -> 假设应用程序崩溃并且由于它是粘性的事实它重新启动并且由于之前崩溃的一些错误它再次崩溃并出现一些异常之后 Android 将不会启动服务 可能的解决方案 -> 使服务逻辑尽可能无错误
第二种方法 -> 运行 与 http://mindtherobot.com/blog/37/android-architecture-tutorial-developing-an-app-with-a-background-service-using-ipc/ 不同的进程中的服务 并确保您采用了第一种方法中提到的所有解决方案。
我所做的所有这些事情正在解决我的问题。
我最初的问题是假设我已经将一个客户端绑定到辅助功能服务,并且我已经知道我的辅助功能服务不是 运行,有没有一种方法可以触发一个意图并告诉Android 启动我的辅助功能服务。 我需要这样做是因为我想控制我的辅助功能的生命周期而不是 Android。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
//your code!!!
// If we get killed, after returning from here, restart
return START_STICKY;
}
像上面那样更改您的 return statement
。它将再次重新启动您的服务。
START_NOT_STICKY
如果系统在 onStartCommand() return 秒后终止服务,请不要重新创建服务,除非有待交付的意图。这是最安全的选择,可以在不必要时避免 运行 您的服务,并且您的应用程序可以简单地重新启动任何未完成的作业。
START_STICKY
如果系统在 onStartCommand() return 秒后终止了服务,则重新创建服务并调用 onStartCommand(),但不要重新传送最后一个 Intent。相反,系统调用 onStartCommand() 时带有一个空意图,除非有未决的意图来启动服务,在这种情况下,这些意图会被传递。这适用于不执行命令但 运行 无限期等待作业的媒体播放器(或类似服务)。
START_REDELIVER_INTENT
如果系统在 onStartCommand() return 秒后终止服务,请重新创建服务并使用传递给服务的最后一个意图调用 onStartCommand()。任何未决的意图依次交付。这适用于正在积极执行应立即恢复的工作的服务,例如下载文件。
我们可以 return 以上任何一项,具体取决于我们的要求。
来源:Here!!!