我有一台带有Android 5.0的华为P8用于测试应用程序.该应用程序需要在后台运行,因为它跟踪BLE区域.
我发现华为内置了一个名为Protected Apps的"功能",可以通过手机设置(电池管理器>受保护的应用程序)进行访问.这允许选定的应用程序在屏幕关闭后继续运行.
对华为来说很明智,但不幸的是,对于我来说,它看起来像是选择加入,即默认情况下应用程序已经关闭,你必须手动将它们放入.这不是一个showstopper,因为我可以在常见问题解答或打印中建议用户关于修复的文档,但我最近安装了Tinder(用于研究目的!),并注意到它被自动放入受保护的列表中.
有谁知道我的应用程序如何做到这一点?它是清单中的设置吗?这是华为为Tinder启用的东西,因为它是一个受欢迎的应用程序?
如果我的应用程序正在运行,我按下主页按钮,应用程序进入后台.现在,如果长按home键并从最近的应用程序列表刷卡它杀死的应用程序,没有人像的事件onPause(),onStop()或者onDestroy()被调用,而该过程被终止.因此,如果我希望我的服务停止,杀死通知和取消注册听众,我该怎么做?我阅读了不少文章和博客,但没有得到任何有用的信息,我没有找到任何有关它的文档.任何帮助,将不胜感激.提前致谢.
我正在开发一个使用蓝牙通信的Android应用程序(使用一个propetary协议),我需要抓住应用程序被杀的那一刻.
我想使用"onDestroy()"方法,但每次应用程序被杀死时都不会调用它.我注意到当我按下后退按钮时会调用它,有时只有当我从任务管理器中删除应用程序时才会调用它.
问题是:我怎样才能抓住应用程序被杀之前的那一刻?
这是我试图使用的代码:
@Override
public void onDestroy() {
sendMessage(msg);
Log.d("SampleApp", "destroy");
super.onDestroy();
}
@Override
public void finish(){
sendMessage(msg);
Log.d("SampleApp", "finish");
super.finish();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,每次我从任务管理器关闭应用程序时都不会调用finish()并且不会调用onDestroy.
我怎么处理这个?
我编写了一个前台服务,它适用于低于Oreo的所有操作系统版本.从Oreo开始,应用程序流程在关闭5分钟后被杀死,并从最近删除应用程序.
根据android开发人员文档中的后台执行限制, 操作系统不应该终止正在运行前台服务的应用程序,并且通知窗口中会显示通知.
根据开发人员文档的指导原则.我按照以下步骤启动前台服务.
startForegroundService()方法开始startForeground()START_STICKY从onStartCommand()的service我在以下手机上遇到此问题:
我试图阻止前台服务被破坏?
我试图重启前台服务?
AlarmManager从onTaskRemoved()重新启动服务.请查看此链接了解详情.根据我的理解,这些制造商已经定制了AOSP,并且不遵守允许前台服务运行的操作系统指南.可能这些制造商已经做到了这一点,因为它给用户带来了很长的电池续航时间
前台服务课
class DataCaptureService : Service() {
private var isServiceStarted = false
override fun onBind(intent: Intent?): IBinder? {
return null
}
override fun onCreate() {
super.onCreate()
wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).run {
newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WakelockTag123").apply {
acquire()
}
}
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int …Run Code Online (Sandbox Code Playgroud) 我有一个涉及导航的应用程序.如果用户启动导航,则会创建一种"navigationLifecycleManager".它存储在应用程序实例中,以便在配置更改,活动等之间切换时幸免于难.
但是,如果用户"退出"应用程序,我想杀死一些后台线程,将一些次要数据存储到应用程序存储中,依此类推.所以我需要一些钩子告诉我应用程序何时退出.
必须通过覆盖"onPause"并检查"isFinishing"来实现.但这并不能解决最近的应用程序列表中的问题.滑动似乎没有任何东西.无论是"的onPause","的onDestroy",也不是"onTerminate"是所谓的活动/应用.
我正在使用该服务每 30 秒发送一次通知。当我的应用程序处于后台模式时,它工作正常。每个通知都正确接收。但是当我终止/关闭我的应用程序时,服务停止并且我没有收到任何通知。
任何人都知道如何在应用程序关闭或终止时运行服务?
这是我的清单文件
```
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".MainService"
android:enabled="true"
android:exported="false"
>
</service>
<service android:name=".NewService" >
</service>
<activity
android:name=".MainActivity2"
android:label="@string/title_activity_main_activity2" >
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
`
让我直接说我的问题。
有一个古老的类似问题: 即使应用程序已从“最近的应用程序”中清除,也要继续服务。请在继续之前浏览链接。
在应用程序完全销毁之前,我必须将一些数据保存到本地数据库。
我对服务的onTaskRemoved()方法有以下问题:
所以我可以依靠 onTaskRemoved() 方法来清理应用程序获取的资源。
这是我的应用程序版本的阻塞问题。我已经尝试了每一个技巧。就像在堆栈中至少有一个活动(我称之为 GhostActivity)一样,如果应用程序从最近的应用程序屏幕中被杀死,我们可以在 onDestroyed() 方法中清理活动。onDestroyed() 被调用,但它有与 onTaskRemoved() 方法完全相同的问题。
几个星期以来我一直在解决这个问题,这很烦人。如果有人有任何解决方案,请告诉我。