当前位置:首页 » 安卓系统 » androidapp点击

androidapp点击

发布时间: 2024-06-24 23:46:14

⑴ android 状态栏接收通知,然后点击通知进入app,这个机制是怎么做到

1.添加软件部分推送程序(模块)到系统服务
2.推送模块常驻系统后台,只能把整个应用完全停止才会没有,这也是有的安卓机很卡的原因,应用里面自己写,也可以通过其他软件链式唤醒
3.平台统一推送服务,好比小米ov那个啥
4.点击进入的那个应用,多数是厂商作了专门适配的,进入特定页面,但这个也是可以通过代码实现的

⑵ Android 从点击应用图标到界面显示的过程

[转] 一篇文章看明白 Android 从点击应用图标到界面显示的过程 (遵循CC 4.0 BY-SA版权协议)

从点击桌面应用图标到应用显示的过程我们再熟悉不过了,下面我们来分析下这个过程都做了什么。

本文主要对以下问题分析:

如不了解 Android 是如何从开机到 Launcher 启动的过程,请先阅读 Android - 系统启动过程

我们知道 Android 系统启动后已经启动了 Zygote,ServiceManager,SystemServer 等系统进程;ServiceManager 进程中完成了 Binder 初始化;SystemServer 进程中 ActivityManagerService,WindowManagerService,PackageManagerService 等系统服务在 ServiceManager 中已经注册;最后启动了 Launcher 桌面应用。

其实 Launcher 本身就是一个应用程序,运行在自己的进程中,我们看到的桌面就是 Launcher 中的一个 Activity。

应用安装的时候,通过 PackageManagerService 解析 apk 的 AndroidManifest.xml 文件,提取出这个 apk 的信息写入到 packages.xml 文件中,这些信息包括:权限、应用包名、icon、apk 的安装位置、版本、userID 等等。packages.xml 文件位于系统目录下/data/system/packages.xml。

同时桌面 Launcher 会为安装过的应用生成不同的应用入口,对应桌面上的应用图标,下面分析点击应用图标的到应用启动的过程。

点击 Launcher 中应用图标将会执行以下方法

在 system_server 进程中的服务端 ActivityManagerService 收到 START_ACTIVITY_TRANSACTION 命令后进行处理,调用 startActivity() 方法。

从 Launcher 点击图标,如果应用没有启动过,则会 fork 一个新进程。创建新进程的时候,ActivityManagerService 会保存一个 ProcessRecord 信息,Activity 应用程序中的AndroidManifest.xml 配置文件中,我们没有指定 Application 标签的 process 属性,系统就会默认使用 package 的名称。每一个应用程序都有自己的 uid,因此,这里 uid + process 的组合就可以为每一个应用程序创建一个 ProcessRecord。每次在新建新进程前的时候会先判断这个 ProcessRecord 是否已存在,如果已经存在就不会新建进程了,这就属于应用内打开 Activity 的过程了。

进程创建成功切换至 App 进程,进入 app 进程后将 ActivityThread 类加载到新进程,并调用 ActivityThread.main() 方法

此时只创建了应用程序的 ActivityThread 和 ApplicationThread,和开启了 Handler 消息循环机制,其他的都还未创建, ActivityThread.attach(false) 又会最终到 ActivityMangerService 的 attachApplication,这个工程其实是将本地的 ApplicationThread 传递到 ActivityMangerService。然后 ActivityMangerService 就可以通过 ApplicationThread 的代理 ApplicationThreadProxy 来调用应用程序 ApplicationThread.bindApplication,通知应用程序的 ApplicationThread 已和 ActivityMangerService 绑定,可以不借助其他进程帮助直接通信了。此时 Launcher 的任务也算是完成了。

在 system_server 进程中的服务端 ActivityManagerService 收到 ATTACH_APPLICATION_TRANSACTION 命令后进行处理,调用 attachApplication()。

发送送完 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令,还会发送 BIND_APPLICATION_TRANSACTION 命令来创建 Application。

在 app 进程中,收到 BIND_APPLICATION_TRANSACTION 命令后调用 ActivityThread.bindApplication()。

ApplicationThreadProxy.bindApplication(…) 会传来这个应用的一些信息,如ApplicationInfo,Configuration 等,在 ApplicationThread.bindApplication 里会待信息封装成AppBindData,通过

将信息放到应用里的消息队列里,通过 Handler 消息机制,在 ActivityThread.handleMeaasge 里处理 H.BIND_APPLICATION 的信息,调用 AplicationThread.handleBindApplication。

Instrumentation:

这时 Application 就创建好了,这点很重要,很多资料里说 Application 是在performLaunchActivity() 里创建的,因为 performLaunchActivity() 也有mInstrumentation.newApplication 这个调用,newApplication() 函数中可看出会先判断是否以及创建了 Application,如果之前已经创建,就返回已创建的 Application 对象。

上面 fork 进程时会发送 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令,在 app 进程中,收到 SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION 命令后调用 ApplicationThread.scheleLaunchActivity()。

与 Window 进行关联,具体过程详见: Activity,Window,View 之间的关系

Activity 的整体启动流程如图所示:

⑶ Android开发如何实现:在app1中点击Button使正在运行的app2不在近期任务列表显示 怎么做

调用接口呗,好多实现方式,如果都是同一台手机,你可以使用aidl技术,也就像进程之间的通信。如果不在同一台手机,你可以通过网络技术,前提是后台得有处理接口。如果你都不想用,想简单,那就通过本地文件进行操作。前提是android6之后,操作读写得申请动态权限哦。方法多得是,看具体的业务需求了。

热点内容
lua脚本实例 发布:2024-06-28 22:36:07 浏览:215
初级会计如何找回注册号密码 发布:2024-06-28 22:19:48 浏览:934
华硕t110ta怎么装安卓系统 发布:2024-06-28 22:14:48 浏览:464
索尼黑卡存储卡被锁定 发布:2024-06-28 22:06:21 浏览:102
数据库的模型设计 发布:2024-06-28 20:41:38 浏览:973
但丁密码开头在意大利哪里 发布:2024-06-28 20:37:23 浏览:365
vpn加速通道加密式 发布:2024-06-28 20:09:06 浏览:805
360粉碎文件夹 发布:2024-06-28 20:03:21 浏览:128
轻松解压演艺 发布:2024-06-28 19:46:20 浏览:390
服务器怎么调客户桌面 发布:2024-06-28 19:15:18 浏览:276