手机的大厂的“应用锁”功能如何实现呢?-学员作业
需求背景说明:
现在各个手机厂商都会有一个叫做“应用锁”的功能,这个应用锁功能可以理解为针对系统中任意一个app都可以进行锁定,app锁定后,点击打开的app就不会直接进入app的Activity画面,而是会先进入一个密码画面,需要用户输入正确的密码后才可以进入app的Activity解码。
正常打开Activity情况,属于直接跳转如下图

针对某个app加入应用锁后,点击app后会进入手势密码等界面,解锁以后才可以进入app的Activity。

Activity启动过程相关知识
-
阶段一:发起请求与初步处理
-
调用:Launcher 进程通过 Binder 调用 ActivityTaskManagerService (ATMS)的startActivity()方法。 -
职责:ATMS 是 Android 10 以后从 AMS 中拆分出的组件,专门负责管理 Activity 的栈、任务和生命周期。 -
阶段二:任务与 Activity 的容器管理
-
处理:ATMS 内部会解析 Intent,处理启动标志等,然后交由 ActivityStarter进行启动逻辑的处理。 -
栈操作: ActivityStarter会调用getOrCreateRootTask()来获取或创建一个目标Task对象(相当于旧版本中的栈),并通过setNewTask()将目标ActivityRecord放入该Task中。 -
阶段三:应用进程创建(如果需要)
-
决策:ATMS 检查目标 Activity 的进程是否存在。若不存在,则通过 Socket 向 Zygote 进程发送请求。 -
结果:Zygote 进程通过 fork()自身,快速孵化出目标应用的新进程。 -
阶段四:跨进程调度生命周期
-
回调:新进程启动后,ATMS 通过 Binder 回调目标进程中 ApplicationThread的方法(如scheduleLaunchActivity)。 -
执行: ApplicationThread是ActivityThread的内部类,它通过 Handler 将消息抛转到主线程,最终由ActivityThread完成 Activity 对象的创建和onCreate()等生命周期方法的调用。
流程图

复现完了上面的整个Activity流程启动,你这边对于今天这个作业有啥想法么?觉得代码应该在哪块进行加入呢?
作业要求:
作业的知识要求: 学习过课程的Activity从无到有启动流程。
具体实现要求
1、请实现一种方案可以对启动Activity进行动态拦截,是否拦截app可以通过settings或者其他数据库保存。
2、第1步拦截目标Activity后,需要启动手势等系统当前的解锁画面
3、在用户解锁完成后,需要对实现对原来Activity的正常跳转,包括传递进来的所有intent数据
4、可以考虑自己实现也可以考虑寻找系统中是否已经有相关api
5、针对第二步,拦截Activity后启动解锁的Activity,这个解锁的Activity可以考虑独立的,不和正常系统解锁界面共用
更多vip免费系统开发经典大厂面试题库获取,课程优惠购买成为vip学员进入vip群,积极讨论各种行业难点痛点疑难问题,答疑服务等。
千里马本人答疑微信:


开学第一课:安卓音频框架Audio子系统实战专题–首发优惠活动
夜雨聆风