Android有时会强制杀死应用程序

6ss1mwsb  于 2023-06-28  发布在  Android
关注(0)|答案(7)|浏览(224)

我开始活动A,然后开始活动B。
我按了Home键,然后等了很久。
当我恢复应用程序时,它强制停止了。

02-03 18:42:54.413 828-844/system_process I/ActivityManager: Force stopping ru.tabor.search appid=10089 user=0: from pid 20405
02-03 18:42:54.414 828-844/system_process I/ActivityManager: Killing 30212:ru.tabor.search/u0a89 (adj 7): stop ru.tabor.search
02-03 18:42:54.445 828-5948/system_process I/WindowState: WIN DEATH: Window{18b92c9b u0 ru.tabor.search/ru.tabor.search.modules.authorization.AuthorizationActivity}
02-03 18:42:54.447 828-845/system_process I/WindowState: WIN DEATH: Window{1cd0cfe4 u0 ru.tabor.search/ru.tabor.search.modules.registration.RegistrationActivity}
02-03 18:42:54.519 828-844/system_process I/ActivityManager:   Force finishing activity 3 ActivityRecord{25a8977f u0 ru.tabor.search/.modules.authorization.AuthorizationActivity t2593}
02-03 18:42:54.520 828-844/system_process I/ActivityManager:   Force finishing activity 3 ActivityRecord{d516838 u0 ru.tabor.search/.modules.registration.RegistrationActivity t2593}
02-03 18:42:54.523 828-20666/system_process W/ActivityManager: Spurious death for ProcessRecord{21ff313b 0:ru.tabor.search/u0a89}, curProc for 30212: null
02-03 18:42:59.890 828-1247/system_process I/ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=ru.tabor.search/.modules.authorization.AuthorizationActivity} from uid 10089 on display 0
02-03 18:42:59.903 828-1247/system_process V/WindowManager: addAppToken: AppWindowToken{1c4987a0 token=Token{279a08a3 ActivityRecord{9f5afd2 u0 ru.tabor.search/.modules.authorization.AuthorizationActivity t2593}}} to stack=1 task=2593 at 0
02-03 18:42:59.919 828-891/system_process V/WindowManager: Adding window Window{1735e91b u0 Starting ru.tabor.search} at 4 of 8 (after Window{2ab6bf53 u0 com.cleanmaster.mguard/com.keniu.security.main.MainActivity})
02-03 18:43:19.288 828-1673/system_process I/ActivityManager: Start proc 21366:ru.tabor.search/u0a89 for activity ru.tabor.search/.modules.authorization.AuthorizationActivity

怎么修?

tvmytwxo

tvmytwxo1#

是否将某些内容作为Intent extra传递给Activity?如果没有,请尝试从设备中删除干净的母版。

f2uvfpb9

f2uvfpb92#

你的应用泄露了吗如果手机内存不足,它将杀死内存占用应用程序。如果有一个进程正在这些活动上运行,则将其转移到一个服务,并在oncreate内部调用startForeground()。

gzszwxb4

gzszwxb43#

Recreating an Activity说:
如果Activity当前已停止且长时间未使用,或者前台Activity需要更多资源,系统也可能会销毁该Activity,因此系统必须关闭后台进程以恢复内存。
所以你不能阻止系统杀死你的应用程序。
要克服它,您应该重写onRestoreInstanceState方法。在这种情况下,您可以在系统终止活动时保存活动状态,然后在导航回该活动时恢复。
另一个选择是实现自己的IntentService
引用自Services API指南:
Android系统仅在内存不足且必须为用户关注的Activity恢复系统资源时才会强制停止服务。

zrfyljdw

zrfyljdw4#

据我所知,你对此无能为力!!!那是android垃圾收集系统的行为!
据我所知,android自己做垃圾收集,如果你在后台长时间不使用一个活动,它将被系统垃圾收集,以使ram免费用于其他应用程序和进程。
如果要保留活动中任何信息,请将其保存在此处;

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
}

当你回到那个活动,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(savedInstanceState!=null){
    // GET #savedInstanceState AND USE THE OBJECT YOU STORED
    }
}

这就是你所能做的。

xfb7svmp

xfb7svmp5#

最有可能的是你的应用程序正在被Android操作系统杀死,因为内存过载,或者可能有某种进程在你的主线程中运行,你需要检查它。同时覆盖OnResume函数并检查您得到的结果。

j91ykkif

j91ykkif6#

显然,Android内存有限,因此虚拟机可以删除任何可能不必要的代码。
查看Activity lifecycle方法,特别是onResume,并确保您完全理解。很多时候,应用程序崩溃只是因为不正确地使用活动生命周期的方法。
另一个重要的部分是Activity的设计考虑,无论持久性数据发生了什么,您的Activity都应该使用某些默认值显示其UI。所以假设是这样的,* 如果我有数据,我会显示,如果我没有,我真的不在乎 * 无论有无数据,您的UI都不会崩溃**。您可以使用资源,例如String.xmldimens.xml来存储一些默认值,甚至在布局中。
如果你仍然想使用单例类,这是非常好的,但请确保每次尝试访问单例时都进行以下检查。

if (instance==null)
    instance=CurrentActivity.getInstance()

getInstance()方法不仅返回当前示例,还将确保

  • 它初始化所有对象和变量
  • 其他单例方法作为示例方法

不要静态地从一个活动访问另一个活动的数据。这对android不好,特别是你现在面临的类型问题,也不是很好的OOP编程实践。
我推荐SharedPreference。有太多更好的方法来持久化数据,如果满足您的需求,请尝试。
如果你想从不同的Android组件(如Activity,Service或BroadcastReciever)传递数据,你可以将其放在一个bundle中并作为Intent发送。和往常一样,它们是SQLLite数据存储,文件IO等。
希望这对你有帮助。

hlswsv35

hlswsv357#

我知道这个问题很老了,但对于那些仍然在寻找答案的人,尝试从Android设置为您的特定应用程序关闭电池优化和打盹模式.这个应该能用

相关问题