And*_*ker 6 multithreading android background-thread android-8.0-oreo
Android 文档表明 Oreo 对后台执行有新的限制:https://developer.android.com/about/versions/oreo/background。这看起来很合理,他们的目标显然是让自己的平台更像 iOS,并防止应用程序在后台猖獗运行。
我不清楚(事实上,根本没有记录)是当 UI 转到后台时你可以在线程上做什么。具体来说,
鉴于我创建了一个线程
new Thread(() -> {
// Naughty thread doing something forever
}).start();
Run Code Online (Sandbox Code Playgroud)
我将应用程序发送到后台
那么...该线程会发生什么?
我创建了非常简单的代码来执行此操作,并且我的线程已经愉快地在 logcat 上运行了 10 多分钟,没有出现任何问题。
有谁有关于此类线程有哪些限制的明确信息?我本以为,由于 Android 限制了后台服务可以执行的操作,因此它也会限制此类线程可以执行的操作。
请注意,我们没有计划编写一个执行此类操作的应用程序。我们只是希望能够编写安全的代码,不会在较新版本的 Android 上引起问题。在 iOS 上,如果您进入后台,那么您将获得一段宽限期来完成您正在做的任何事情(并且您可以要求更多时间),但最终您的线程将被挂起。
有谁有关于此类线程有哪些限制的明确信息?我本以为,由于 Android 限制了后台服务可以执行的操作,因此它也会限制此类线程可以执行的操作。
对于此类线程可以运行的时间没有任何限制。只要你的应用程序在后台运行,你就可以继续在后台执行Thread
但是,您需要考虑如何优雅地终止/释放线程,因为线程不会无休止地运行。如果操作系统需要在内存紧缩期间放弃内存,那么托管此后台 Activity 的应用程序的进程将被终止,最终销毁线程。如果处理不当,这将导致线程/内存泄漏。
归档时间: |
|
查看次数: |
2843 次 |
最近记录: |