Android四大组件.docx

上传人:b****8 文档编号:28584128 上传时间:2023-07-19 格式:DOCX 页数:11 大小:300.40KB
下载 相关 举报
Android四大组件.docx_第1页
第1页 / 共11页
Android四大组件.docx_第2页
第2页 / 共11页
Android四大组件.docx_第3页
第3页 / 共11页
Android四大组件.docx_第4页
第4页 / 共11页
Android四大组件.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

Android四大组件.docx

《Android四大组件.docx》由会员分享,可在线阅读,更多相关《Android四大组件.docx(11页珍藏版)》请在冰豆网上搜索。

Android四大组件.docx

Android四大组件

1、Activity

1、进程等级的优先级的内容查知识

进程分为5个等级的优先级:

(从高到低)

1.Foregroundprocess前台进程用户正在玩的应用程序对应的进程

2.Visibleprocess可视进程用户仍然可以看到这个进程的界面。

3.Serviceprocess服务进程应用程序有一个服务组件在后台运行。

4.Backgroundprocess后台进程应用程序没有服务在运行并且最小化(activityonstop)

5.Emptyprocess空进程没有任何运行的activity,任务栈空了

Activity在退出的时候进程不会销毁,会保留一个空进程方便以后启动.但在内存不足时进程会被销毁;

2、任务栈

任务栈:

管理记录用户打开应用程序的先后顺序

为了记录用户开启了那些activity,记录这些activity开启的先后顺序,google引入任务栈(taskstack)概念,帮助维护好的用户体验。

1.一个应用程序一般都是由多个activity组成的。

2.任务栈(taskstack)(别名backstack后退栈)记录存放用户开启的activity的。

3.一个应用程序一被开启系统就给他分配一个任务栈,当所有的activity都退出的时候,任务栈就清空了。

4.任务栈的id是一个integer的数据类型自增长的。

5.在android操作系统里面会存在多个任务栈,一个应用程序一个应用栈。

6.桌面应用和一般的应用程序是一样的,任务栈的行为也是一样。

只是桌面应用被屏蔽掉了

7.默认情况下,关闭掉一个应用程序d时候会按照上面的进程优先级对内存进行回收。

3、Activity的启动模式

activity的启动模式:

1.standard默认标准的启动模式,每次startActivity都是创建一个新的activity的实例。

适用于绝大大数情况

2.singleTop单一顶部,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例,而是调用onNewIntent()方法。

应用场景:

浏览器书签。

避免栈顶的activity被重复的创建,解决用户体验问题。

3.SingleTask单一任务栈,activity只会在任务栈里面存在一个实例。

如果要激活的activity,在任务栈里面已经存在,就不会创建新的activity,而是复用这个已经存在的activity,调用onNewIntent()方法,并且清空当前activity任务栈上面所有的activity

应用场景:

浏览器activity,整个任务栈只有一个实例,节约内存和cpu的目的

注意:

activity还是运行在当前应用程序的任务栈里面的。

不会创建新的任务栈。

4.singleInstance单态单例模式单一实例,整个手机操作系统里面只有一个实例存在。

不同的应用去打开这个activity共享公用的同一个activity。

他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。

应用场景:

呼叫来电界面InCallScreen

4、Activity的生命周期(全)

·

Activity的生命周期

1、第一次启动

onCreate--->onStart--->onResume

2、按返回键后:

onPause--->onStop--->onDestroy

3.当按home键后:

onPause-->onSaveInstance-->onStop打开后onRestart-->onStart-->onResume

4.横竖屏的切换

onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->

onStart-->onRestoreInstanceState-->onResume-->

1.不设置Activity的android:

configChanges时,切屏会重新调用各个生命周期,默认首先销毁当前Activity,然后重新加载。

onSaveInstanceState-->

onPause-->

onStop-->

onDestroy-->

onCreate-->

onStart-->

onRestoreInstanceState-->

onResume-->

3.设置Activity的android:

configChanges="orientation|keyboardHidden|screenSize"(目的是不要让屏幕的方向屏幕的大小键盘来影响生命周期)时,切屏不会重新调用各个生命周期,生命周期不会改变,只会执行onConfigurationChanged方法。

横屏onConfigurationChanged-->

竖屏onConfigurationChanged-->onConfigurationChanged

两个Activity之间跳转时必然会执行的是哪几个方法:

比如两个Activity分别是A,B,当A跳转到B时,A会调用onPause方法,然后B调用onCreate,onStart,onResume。

这个时候若B覆盖了窗体,A会调用onStop方法,如果B是透明的或者是对话框样式,就不会调用onStop方法。

有关于服务的生命周期

执行顺序bindService--->onCreat--->OnUnbind--->onDestroy

2、广播

在android里面实际上是一种消息机制,用于线程和线程、组件和组件、进程和进程。

但是广播是重量级别的消息机制它的生命周期很短:

onRecive()执行完成。

广播接受者就结束。

发送广播

Intentintent=newIntent();

//指定一个动作

intent.setAction("cn.itcast.action.yuanwei");

//存放数据

intent.putExtra("name","小伙快来");

//发送广播

sendBroadcast(intent);

接收广播:

如果是清单订阅直接接收:

写一个类继承BroadcastReceiver,要想接收广播,必须先订阅广播

publicclassMyBroadcastReceiverextendsBroadcastReceiver{

//当广播接收者接收到广播调用该方法

@Override

publicvoidonReceive(Contextcontext,Intentintent){

如果是代码订阅则要在onreserve里面写上注册的代码

MyBroadcastReceiverreceiver=newMyBroadcastReceiver();

IntentFilterfilter=newIntentFilter();

filter.addAction("cn.itcast.action.yuanwei");

//订阅广播

registerReceiver(receiver,filter);

【拦截短信】

//查看短信的数据

Object[]objects=(Object[])intent.getExtras().get("pdus");

for(Objectobject:

objects){

//将object强制转换为短信对象

SmsMessagesmsMessage=SmsMessage.createFromPdu((byte[])object);

//得到短信号码

Stringaddress=smsMessage.getDisplayOriginatingAddress();

//得到短信内容

Stringbody=smsMessage.getDisplayMessageBody();

//得到短信发送时间milliseconds-->毫秒

longmillis=smsMessage.getTimestampMillis();

//将该毫秒值转化格式化为日期字符串

SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddhh:

mm:

ss");

StringdateStr=format.format(millis);

Log.i(TAG,"address:

"+address);

Log.i(TAG,"body:

"+body);

Log.i(TAG,"dateStr:

"+dateStr);

//判断号码,8888属于情敌号码,拦截abort-->中断

if("8888".equals(address)){

abortBroadcast();

}}}

不在广播里面了new线程。

1、广播的优先级:

无序广播和有序广播。

有序广播,第三个参数可以指定接收者,这样就不可能被拦截。

拦截广播优先级低的无法接受(优先级相同先配置的先接收广播)

无序广播所有的接收者都能接受

2、SD卡被移除的广播接收者

3、服务

长期在后台运行

长期后台运行的组件,不要在activity开启子线程。

应该是创建服务,在服务里面开启子线程。

服务的目的:

1.长期后台运行。

2.提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,把进程重新创建。

1、服务的生命周期:

1、采用start的方式开启服务

生命周期如下:

onStart()过时了

开启服务:

onCreate()-->onStartCommand()--->onDestory();

如果服务已经开启,不会重复的执行onCreate(),而是会调用onStart()和onStartCommand();

服务停止的时候onDestory().

服务只会被停止一次

2、服务还有一种开启方式,绑定的方式开启服务。

onCreate()--->onBind();--->onunbind()-->onDestory();

绑定服务不会调用onstart或者onstartcommand方法;

3、混合调用的服务的生命周期:

服务长期后台运行,又想调用服务的方法:

1.start方式开启服务(保证服务长期后台运行)

2.bind方式绑定服务(保证调用服务的方法)

3.unbind解除绑定服务

4.stopService停止服务。

2、两种开启服务方法的区别。

start方式开启服务。

一旦服务开启跟调用者(开启者)就没有任何关系了。

开启者退出了,开启者挂了,服务还在后台长期的运行。

开启者没有办法去调用服务里面的方法。

(美国的司法独立)

bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。

不求同时生,但求同时死。

开启者可以调用服务里面的方法。

3、绑定服务,Activity与服务进行通信

方法都写在中间人里面

Activity里面

由于已上方法所有写在中间人里面的所有方法都能被绑定服务的activity调用,为了让里面的某个方法被暴露出来需要使用接口来实现

1.接口代码

这样的话就只能调用中间人里面的

方法,而调用不到里面的其他方法。

进程间通信

在Android源码getsystemservice里面可以看到上下文里面有很多都是使用远程服务来对外调用的每个管理器都是返回的是Ibinder对象

4、ContentPrider

5、数据库

是一种轻量级的数据库,同样遵守四大特性原子性、一致性、隔离性、持久性

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1