安卓四大组件

Activity:

Android应用层开发的四大组件之一,主要负责和用户交互部分,有自己的生命周期,在其上可以布置按钮,文本框等各种控件,简单来说就是AndroidUI部分承担了View的容器和控制器的功能

生命周期:

 

onCreate()在Activity第一次被创建的时候被调用

onDestroy()在Activity销毁前调用

 

onStart()Activity正要变得为用户所见时被调用

onStop()当Activity不再为用户可见时调用此方法

 

onResume()在Activity开始与用户进行交互之前被调用

onPasue()当系统将要启动另一个 Activity时调用

onRestart()在Activity停止后,在再次启动之前被调用

activity还有两个方法 onPostResume() 和 OnPostCreate()这两个生命周期的方法,不过开发的时候没有用到过.

Acitivity三种状态:

1运行:activity在最前端运行;

2停止:activity不可见,完全被覆盖;

3暂停:activity可见,但前端还有其他activity注意:在当前Activitiiy弹出的对话框是Activity的一部分,弹出时,不会执行onPause方法;

Activity启动模式:

standard

默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

singleTop

可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

singleTask

 

 

 

 

 

 

只有一个实例。在同一个应用程序中启动它的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。

如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个ActivitysingleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

singleInstance

只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

配置样例:

<activity android:name="com.example.mobilesafe.WatchDogActivity"

             android:launchMode="singleInstance"/>

Activity启动方法:

在一个Activity中调用startActivity(intent)方法,直接启动Activity,不带请求码。

在一个Activity中调用startActivityForResult(intentrequestCode)方法,带请求码启动Activity

onActivityResult(int requestCode, int resultCode, Intent data)

BroadcastReceiver:

就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播

应用场景

1. 当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;

2. 当锁屏或者点亮屏幕时就会产生一条广播,接收这条广播就可以实现一些暂停或者开启一些耗电进程的功能。

3. 当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;

4. 当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度;

注册

静态注册:静态注册是在AndroidManifest.xml文件中配置的。

动态注册:动态注册需要在代码中动态的指定广播地址并注册。

生命周期

1. 广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁

2. 广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框anr

3. 最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉

4. 耗时的较长的工作最好放在服务中完成

 

 

有序广播终止了,resultRecevier还可以拿到数据

无序广播没有顺序,不可修改,不可以拦截

Service

服务是看不到界面的,,就是一个没有界面的Activity, 并且长期在后台运行的一个组件.

为什么用服务?

进程优先级回收时是从5~1, 从低到高Foreground process 前台进程

 Visible process 可视进程

   Service process 服务进程

 Background process 后台进程

 Empty process 空进程

回收的优先级: 先回收空进程一个一个回收的当内存够用时不再回收空进程如果空进程回收完毕后内存还是不够用时继续向上一个一个的回收后台进程依次类推.

当系统内存不够用时需要回收服务进程时当系统内存又够用时会重新启动服务当用户去手动的把服务关闭时服务不会再重启了

启动方式:

直接启动:Activity开启完服务后就不管服务了. Activity和服务没有关系. startService开启的服务, 只有stopService可以关闭

绑定启动:可以在activity中调用service中的方法.

 

 

 

 

Service的作用

由于ANRActivityBroadcastReceiver响应时间的限制(Activity对事件响应不超过5秒,BroadcastReceiver执行不超过10),使得在其中都不适合执行较耗时操作,这样像网络、数据库、复杂计算这类耗时操作的执行就需要一个组件来承担。Service作为Android四大组件之一,其功能之一就是耗时操作的执行,主要功能如下:

a. 执行需要长时间运行的操作,这个操作不与用户进行交互,如网络下载、大文件I/O、复杂计算、监听手机状态。

b. 应用内或应用间数据通信

ContentProvider

数据库在Android当中是私有的意味着只有由创建数据库的进程可访问它。

一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据Activity当中通过getContentResolver()可以得到当前应用的 ContentResolver实例。

 ContentResolver提供的接口和ContentProvider中需要实现的接口对应,主要有以下几个。

Ø Query  insert  update  delete

 

Intent 的应用:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值