在Activity的onCreate()方法中调用finish()会发生什么?
在Activity的onCreate()中调用finish()的行为解析
我来给你一步步拆解这个问题:
1. 调用finish()后会触发的生命周期流程
当你在onCreate()方法里调用finish()时,Activity的生命周期会跳出正常的执行链路:
- 正常流程:
onCreate()→onStart()→onResume() - 调用finish()后的流程:
onCreate()→onStart()→onPause()→onStop()→onDestroy()
简单说,系统会在onCreate()执行完毕后,直接启动Activity的销毁流程,不会走到让界面处于可交互的onResume()阶段。
2. Activity会不会显示后再关闭?
绝大多数情况下,用户完全看不到这个Activity的界面。
因为Activity的视图绘制、渲染到屏幕上的操作,是在onResume()之后才真正完成的。而调用finish()后,系统还没等到界面渲染完成,就开始销毁Activity了。除非你的onCreate()里做了非常耗时的操作(比如同步网络请求),导致系统有足够时间渲染界面,但这种情况在正规开发里几乎不会出现,恶意软件也不会这么干——毕竟耗时操作会暴露痕迹。
关于恶意软件的利用思路
这种方式确实曾经被恶意软件用来做“隐形启动”:
- 虽然Activity很快被销毁,但
onCreate()方法里的代码会完整执行。恶意软件可以在这里悄悄启动后台服务、窃取设备信息、加载恶意模块等,而用户完全察觉不到有Activity启动过。
不过现在Android的安全机制已经做了很多限制:比如Android 10及以上版本,后台启动Activity需要特殊权限,而且系统会对这类行为进行检测和拦截;另外,应用商店的审核也会扫描这类可疑代码,所以这种手法的有效性已经大打折扣了。
内容的提问来源于stack exchange,提问作者Eduardo Brito
相关产品推荐
相关产品推荐

