再识android (二)

网友投稿 866 2022-11-19

再识android (二)

再识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小时内删除侵权内容。

上一篇:大数据环境---zookeeper的安装
下一篇:Spring 静态变量/构造函数注入失败的解决方案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~