0
点赞
收藏
分享

微信扫一扫

再识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:

                    每个 android组件 可以设置 一个或多个  IntentFilter,每个IntentFilter是独立的,声明在AndroidManifest.xml文件中。 

                    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.例子: ​​参考地址​​

举报

相关推荐

0 条评论