洞察探索如何利用兼容微信生态的小程序容器,实现跨平台开发,助力金融和车联网行业的数字化转型。
866
2022-11-19
再识android (二)
Activity周边:
1.生命周期: onCreated(); onRestart(); onStart(); onResume(); onPause(); onStop();
2.监控范围的三个主要循环:
整个生命周期:onCreate() 与 onDestroy()之间;
资源周期: onCreate() 设置全局状态,实例资源; onDestroy() 释放余下资源;
显示生命周期: onStart() 与 onStop() 之间;
3.四个基本状态:
活动中: Activity 在屏幕前(栈顶),是 可视,可交互的;
暂停: 失去焦点,但 仍然可见。 保留了所有的状态信息 和 成员信息 并仍然附加到 视图管理器。
停止: 完全被另一个 Activity遮住, 不再对用户可见;(仍然保留着所有的状态和成员信息);
待用: 处于暂停或停止的状态,系统可以启用它,也可直接杀掉它。
4.Task,栈,以及加载模式:
Task: 一组与用户交互 并执行特定工作的Activity 的集合。 它们根据被启动的顺序 排列在栈中(回退栈);直观上看,Task 完成了Activity之间的无缝用户体验。 有时候,task是直接 压入/弹出 栈, 而有时候,则是新建 一个栈,然后进行压入/弹出 操作, 根据 启动模式 进行设置。
为了打断activity的默认行为, 可以定义启动模式,方法有:
一,修改manifest配置文件的 launchMode 属性:
1.standard模式; 2.SingleTop模式;3.SingleTask模式; 4.SingleInstance模式;
二,通过设置Intent的 flag:
FLAG_ACTIVITY_NEW_TASK,
FLAG_ACTIVITY_SINGLE_TOP,
FLAG_ACTIVITY_CLEAR_TOP
5.如何保存和恢复 Activity状态:
当系统在内存在不足情况下, 调用了 onPause 和 onStop方法, Activity可能会被系统销毁。
为了 避免上述情况,可使用 onSaveInstanceState()方法, 将所有信息保存到Bundle上面。 就算发生意外,也能从Bundle上面恢复。
6.启动Activity并得到结果:
startActivityForResult(Intent, int) 方法, 并以 onActivityResult(int,int, Intent)方法返回。
广播(Broadcast)周边:
1.Intent介绍:
同一个 或 不同的应用组件之间的消息传递媒介。 实质上就是一个 数据结构。 安卓应用程序中的 三个核心组件(Activity,Service,Broadcast receivers) 就是 通过Intent启动的。
2.Intent 结构:
主要: action动作,由系统定义。
data数据,通过 标准uri 的方式访问系统资源。 如: tel:123, content://contacts/people/1
符加: category类别;
type数据类型;
component组件;
extras符加信息;
flag,设置activity的启动模式。
3.Intent的两种类型:
显式Intent: 一般用于应用程序内部传递消息。 如 Intent.setClass(Context,Class),
Intent.setComponent(ComponentName)
隐式Intent: 其没有明确的目标组件名称,Android系统 会帮助应用程序 寻找 与 当前Intent相匹配的组件。 通过与 IntentFilter比较完成目标组件的选择。 IntentFilter 审核,主要是 解析 隐式Intent请求 的 action,data,以及 category元素。
4.IntentFilter:
IntentFilter可以有一个或多个 Action用于过滤Intent,任一匹配即通过;
IntentFilter可以有一个或多个 Data,也可以没有,任一匹配即通过;
IntentFilter可以有一个或多个 Category, 全部匹配才通过;
5.Broadcast Receiver:
见名知意,用于接收来自 系统和应用的广播。
6.创建BroadcastReceiver:
1.继承 android.content.BraodcastReceiver,覆写 onReceive方法。
2.注册该组件。 包括两种方式:
1.在 AndroidManifest.xml静态配置;
2.通过 在activity中,调用 registerReceiver()方法来实现效果。
7.广播类型:
普通广播: 所有监听该广播的接收者都能接收到该广播;
有序广播: 按照接收者的 优先顺序 接收广播。 优先级在 intent-filter的 priority属性中设置。
8.BroadcastReceiver的生命周期:
运行onReceive()之后,就销毁。
每次广播被接收到之后, 会重新创建BroadcastReceiver对象。
Service周边:
1.Service:
可以在后台长时间于运行, 而且不提供任何用户接口的应用组件。
2.Service 的两种形式:
1.启动形式: 该形式下, service组件是独立于其他组件的。即使创建它的组件被销毁,它仍然可以继续工作。
2.绑定形式: 应用组件通过调用 bindService()的方法 来绑定 Service。 当servcie与调用它的组件解绑时, Service也就销毁了 。
3.Service的创建方式:
一.创建启动形式Service,有两种方式:
1.直接继承 Service类。
2.Android系统提供的扩展类: IntentService,它是单一处理的,每一处理一个。
二. 创建绑定形式Service:
仍然要有继承自 Service的实体。只不过覆写onBind()方法, 通过静态代理的模式返回一个 IBinder对象。 activity通过设置 bindService()方法绑定 service。
4.Service的生命周期:
onCreate --> onDestroy。
onBind ---> onUnbind。
5.例子: 参考地址
ContentProvider周边:
1.ContentProvider:
android中,每个应用都有自己的独立虚拟机,这样能保证应用的完整性。 应用于应用之间传输数据不是很方便, 因此引入 ContentProvider来处理这个问题,它是用来 管理对结构化数据集 进行访问的一组接口。 主要完成的功能是: 对数据进行封装 并提供接口给外部调用。
2.ContentResolver:
应用程序 使用 ContentResolver 客户端 来访问 ContentProviders的数据。
contentProvider 与 contentResolver 的具体子类实例 拥有相同名字 的接口, 都提供了统一的方法。
应用程序中的 ContentResolver 与 我们自己应用程序中的 ContentProvider 对象 能够自动处理进程间通信。
3.调用系统的ContentProvider:
1.在activity中,直接调用 getContentResoler 方法,获取一个 ContetnResolver实例对象。
2.通过ContentResolver实例的query方法,按照它相关的使用规则,进行相应的操作。
4.访问自定义的ContentProvider:
1.自定义ContentProvider,需要继承自: ContentProvider,并覆写相应的方法。
2.在AndroidManifest.xml中注册,该自定义 ContentProvider。
3.新开项目,并提供ContentResolver的具体操作,同 调用系统ContentProvider类似。 (注意,它们之间的匹配主要是通过: UriMatcher ,换言之,通过uri字符串进行匹配,注册provider的时候,需要给其权限字符串。)
5.例子: 参考地址
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~