Android回顾--(六) 四大组件之Activity初探

Activity的四大金刚(组件):

   Activity、Service、Broadcast-Receiver、Content-Provider


前面我们提到了控件的概念,今天就来解开关于Android中的四大组件的面纱。

四大组件都是用来干嘛的?

1、Activity:主要是用来完成页面的显示以及页面的业务逻辑的处理
2、Service:服务,一般运行在后台。用于处理一些逻辑问题。一般音乐播放器的播放基本都放在这里面。
3、Broadcast:广播,分很多种。一般都是用来传递消息的,可以软件内部传,也可以软件与软件传。
4、ContenProvider:暴露自身软件的数据给其他软件,可以通过这个访问系统的资源。比如电话本,短信这些东西。

Activity的生命周期:

咳咳。敲黑板,划重点了!这里一定要好好的理解一下,工作了之后才真的深刻理解到生命周期的重要性。所有的操作都要在对应的生命周期里面去做,不然就会很容易出错。

Activity有哪些生命周期方法呢?

1、onCreate():这个activity生命周期的第一个方法。用来完成页面的初始化操作的。setContentView()用来获取保存的临时数据(有时候activity不是正常的退出,根据业务需求会恢复数据数据)
2、onStart():这个是生命周期的第二个方法,执行完毕的时候,程序已经显示出来,用户可见但是不能点击交互。
3、onResume():这个第三个执行的方法,执行完毕的时候,程序已经可见并且获取到了焦点。用户可以进行点击交互了。
4、onPause():这是第四个执行的方法,也是activity死亡生命周期的第一个方法。和onResume()生命周期方法是成对出现的。这个方法表示程序还依然看见,但是用户已经不能够进行点击交互的操作了。
5、onStop():死亡生命周期的第二个方法,和onStart()是对应的。表示程序已经不可见了。
6、onDestory():死亡生命周期的最后一个方法。和onCreate()对应。释放当前activity所占用的所有资源。

Activity的几种生命周期执行场景

1、Activity的自生自灭

onCreate()-->onStart()-->onResume()-->onPause()-->onStop()-->onStop()-->onDestory()

2、开启A activity,跳转B activity,返回 A activity

A onCreate()-->A onStart()-->A onResume()-->A onPouse()-->B onCreate()-->B onStart()-->B onResume()-->A onStop()-->
返回键-->B onPause()-->A onRestart()-->A onStart()-->A onRsume()-->B onStop()-->B onDestory()-->
返回键-->A onPsuse()-->A onStop()-->A onDestory()

限制Activity横竖屏

android:screenOrientation="portrait"//限制这个页面竖屏 "landscape"是限制此页面横屏显示

应用横竖屏切换的时候Activity的生命周期问题?

android:configChanges="orientation" //限制横竖屏切换,这样生命周期就不会变换

  如果不声明也不设置的话,那么当我们的应用在进行横竖屏切换的时候就会将我们当前显示的这个Activity出栈,然后再启动这个Activity。这样的话,就会出现问题。不断的调用当前Activity的生命周期,这样在游戏或者视屏播放的时候,就会出现问题。

Activity的创建

讲了这么久的Activity,还没有给回顾到怎么创建Activity(手动捂脸!)。创建Activity有两种方法:
1、编写一个类继承于Activity,然后重写Activity里面的onCreate()方法,注意这里面含有一个bundle参数。

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

bundle是个啥?一个内部维护的HashMap对象的一个集合的引用 简单点说就是:内部有一个双列集合我们可以操作双列集合来达到操作Bundle的效果 Bundle---->集合
2、直接通过编译器创建一个

Activity页面之间的跳转:

前面有提到A activity跳转到B activity。那么activity之间是怎么跳转的呢?这时候就该Intent出场了。Intent是四大组件之间的粘合剂,四大组件之间的一个桥梁,没有intent,四大组件之间就是独立的没有任何关系的。

Intent实现页面的跳转

//Inten的两种构造方式
//1 、带参构造
Inatent intent=new Intent(是当前的上下文对象,后面这个是跳转的页面的class对象);
//2 、无参构造
Intent intent=new Intent();

intent.setClass(getApplicationContext(),SecondActivity.class);   //包的上下文指的是应用的上下文  要跳转页面的class对象 
intent.setClassName(getApplicationContext(),"com.example.activitylife.SecondActivity") // 后面的这个类名必须是包名+类名
intent.setClassName("com.example.activitylife","com.example.activitylife.SecondActivity");  //这种方式可以打开另外一个应用里面的页面
intent.setComponent(new ComponentName("com.example.activitylife","com.example.activitylife.SecondActivity"));  //称为显示的打开一个Acticity 通过组件的形式来进行打开
intent.setComponent(new ComponentName("com.example.androidlife1","com.example.androidlife1.MainActivity"));    
intent.setAction("xiaobobo");       //给当前的Activity设置一个Action  我们可以通过Action来找到当前的Activity

注意:如果给应用设置了Action的属性,那么在Activity的申明中必须要加上<category android:name="android.intent.category.LAUNCHER" /> 属性

Activity之间的传值问题:

1、从A activity传值给B activity,使用intent传值。
   a、直接通过intent.putExtra("key",value)的形式进行传值
   b、在B页面通过getIntent()拿到intent对象,通过intent.getExtra("key",default)获取值()
2、从A Activity跳转到B Activity 再跳转到C Activity
   a、打开Activity的时候只能使用startActivityForResult(intent,requestCode)来打开 第二个值是请求码,可以自定义,后面会根据请求码获取回归数据
   b、重写onActivityResult()方法 来接收死亡的Activity传回来的数据
   c、在需要传回数据的地方,使用intent来对数据进行封装 然后再使用setResult(intent)来将数据回传回来。
   d、在onActivityResult里面解析数据


注意:四大组件使用必须要在AndroidManifest.xml文件中进行声明。四大组件都是属于应用,所以我们需要在Application的内部进行声明。而所有的权限是正对应整个工程的,所以需要在Application之外来进行声明。
为啥要声明? 告诉Android系统这个应用软件里面包含了哪些组件。

声明Activity的格式

  <activity
            android:name="com.example.activitylife.MainActivity"    //Activity的名字
            android:label="@string/app_name" >                      //Activity的标签(可以有也可以木有)
     <intent-filter> //过滤器(把含有下面配置的Action给过滤出来)
           <action android:name="android.intent.action.MAIN" /> //动作
           <category android:name="android.intent.category.LAUNCHER" /> 类别  //表示的是建立那个Lancher的图片在Lancher里面是可以启动的
     </intent-filter>
 </activity>

一般来说配置四大组件不需要配置这么多,只需要配置名称和启动模式就OK了,除非有特使的业务需求。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容