Android四大组件之Activity

1、什么是Activity?

Activity是用户和应用程序之间进行交互的接口,它提供了一个界面供用户进行各种点击、触摸、滑动等操作,

这个界面就是Activity;

2、Acitivity常见的四种状态是什么?具体表现?

 第一种:活动状态(runnning), Activity处于活动状态时,用户可以进行点击、滑动等操作,屏幕会根据用户操作做出相

       应,Activity此时处于栈顶状态;

 第二种:暂停状态(paused),Activity处于暂停状态时,Activity暂时失去焦点,失去与用户交互的能力,成员变量和状 

      态信息还存在;

 第三种:停止状态(stopped),Activity处于停止状态时,Activity被其他Activity完全覆盖,成员变量和状态是否被回收

      取决于内存是否紧张;

第四种: 被回收状态(killed);Activity处于被回收的状态时,Activity所保存的成员变量和状态信息都会被回收。 

3、Activity生命周期是怎样的?

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

 创建-->开始-->运行-->暂停-->停止-->销毁-->重启

 onCreate : Activity第一次创建时会调用此方法;

onStart : Activity启动时(不可见变为可见)时调用;

 onResume : Activity运行时(活动准备好和用户交互/恢复一个活动)调用,运行时位于返回栈栈顶;

 onPause:Activity暂停时(准备启动一个活动或恢复另一个活动)调用;

 onStop : Activity状态变为完全不可见时调用;

 onDestory : Activity被销毁之前调用;

 onRestart : Acitivity重启时(Activity由停止状态变为运行状态时)调用;

 注意:Activity生命周期的方法是成对出现的:

 onCreate() & onDestory() onStart() & onStop() onResume() & onPause()

4、完整生存期、可见生存期、前台生存期有什么区别?

 完整生存期:Activity在onCreate()方法与onDestory()方法之间经历的生命周期;

 可见生存期:Activity在onStart()方法与onStop()方法之间经历的生命周期;

 前台生存期:Activity在onResume()方法与onPause()方法之间经历的生命周期;

5、Activity启动模式

 标准模式(Standard):每次启动一个Activity都会创建一个新的实例,每创建一个Activity都会走相应的生命周期;

 栈顶复用模式:如果创建的Activity处于栈顶,就不会创建新的实例,会复用栈顶的Activity ;

 单例模式(SingleTask):此模式会检测整个任务栈是否存在当前所需要启动的Activity,存在直接置于栈顶,并将这个Activity以上的所有Activity全部删除(销毁),但需要注意,此时会在Activity中回调一个onNewIntent()方法;

 SingleInstance : 此模式下,设置次此模式的Activity在整个系统中有且只有一个实例,且这个Activity独享任务栈;

6、Android任务栈

 Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动集合,这个栈也称为返回栈;

 栈的原则:先进后出,系统总是会显示处于栈顶的活动给用户;

 每当我们启动了一个新的活动,它都会返回栈中入栈,并处于栈顶的位置,每当我们按下返回键或者调用finish()方法销

 毁一个活动时,处于栈顶扥活动会出栈,这时前一个入栈的活动就会重新处于栈顶的位置。

7、Activity的两种启动方式

 显示启动:startActivity(new Intent(MainActivity.this , TargetActivity.class));

 注意:Activity启动时要在Mainfest文件中进行注册

 隐式启动:如果Intent没有指定要启动组件的完整类名,那么这个Intent就是隐式的,隐式的Intent只用在当我们想在自己

  的App中通过Intent启动另一个App的组件时,让另一个App的组件接收并处理改Intent 。

8、startActivityForResult和启动模式


startActivityForResult方法能够起效:standard和singleTop
startActivityForResult方法不能够起效:singleTask和singleInstance


1)只要将被启动的Activity属性设置为singleTask则一定不起效


2)只要将被启动的Activity属性设置为singleInstance则一定不起效


3)只要将启动的Activity模式设置为singleInstance则不论被启动的Activity为什么模式均不起效.

9、多个Activity交互的生命周期

      举例1::A activity打开 B activity的时候,生命周期变化如下:

      A activity会依次执行: onCreate --> onStart --> onResume --> onPause , 然后继续执行B activity的 --> onCreate -->onStart  --> onPause ,最后执行A的onStop方法(如果内存紧张A activity被回收了,那就会执行A activity的onDestory方法)

      举例2:在B activity中,点击back键的时候返回到A activity时,生命周期变化如下:

      首先执行的时B activity的 --> onPause --> 然后执行A activity的 onRestart --> onStart --> onResume -->最后执行B activity的---> onStop ---> onDestory .

10、使用Intent启动系统功能

      1)打开一个网页:         

     Intent intent = new Intent();
     intent.setAction(Intent.ACTION_VIEW);
     Uri uri = Uri.parse("http://www.baidu.com");
     intent.setData(uri);
     startActivity(intent);

       2)打开相册、图库      

     Intent intent = new Intent();
     intent.setAction(Intent.ACTION_GET_CONTENT);
     intent.setType("image/*");
     startActivity(intent);

       3)发送短信 

     Intent intent = new Intent();
     intent.setAction(Intent.ACTION_SEND);
     intent.setType("text/plain");
     intent.putExtra(Intent.EXTRA_TEXT,"It is a messsage");
     startActivity(intent);

        4)打开电话页面

     Intent intent = new Intent();
     intent.setAction(Intent.ACTION_VIEW);
     Uri uri = Uri.parse("tel:123456");
     intent.setData(uri);
     startActivity(intent);

11、Activity生命周期常见状况

       1)  Activity正常启动:  onCreate() ---> onStart() ---> onResume()

       2)  点击back键回退:   onPause() ---> onStop() ---> onDestory()

       3)  打开新的Activity:   onPause() ---> onStop() ---> onCreate() ---> onStart() --->onResume()

       4)  Activity异常 : onSaveInstanceState() 用来保存数据

       5) Activity重新创建后进行数据恢复:   onRestoreInstanceState()用来恢复数据

 

        注意:常见情况是  在onSaveInstanceState()方法中保存数据,在onCreate()方法中进行数据的恢复

        那么之后可以在 onSaveInstanceState()方法中保存数据,在onRestoreInstanceState()方法中进行数据的恢复;

        既然onCreate()方法与onRestoreInstanceState()方法都可以进行数据恢复,两者的区别在于,onCreate()方法中

       恢复数据需要判断bundle是否为空, 而 onRestoreInstanceState()方法则无需判断bundle是否为空.

12、Activity之间通信

        1)Activity-->Activity:

             通过intent进行传递,具体使用Bundle对象对传递的参数进行存取

        2)Activity-->Fragment:

             第一种方法:在Activity创建Bundle对象放入key,value,然后初始化目标fragment,调用setArguments方法放入bundle对

             象到 Fragment中,例如onStart方法中先判断当前Fragment是否依附于Activity,如果是则通过getArguments方法根据

             key获取传递的值;

             第二种方法:

              直接在Activity中定义方法,然后在Fragment获取对应Activity并进行强转,然后调用方法获取传递的数据

        3)Fragment-->Activity:使用接口回调

              在Fragment中定义一个内部回调接口,再让包含Fragment的Activity实现回调接口,然后Fragment就可以调用接口当中

              的方法,将数据传递给Activity当Fragment添加到Activity中时,会调用Fragment的生命周期方法的onAttach(),在此检

              查Activity是否实现了Fragment当中的接口;赋值给Fragment当中的那个接口;调用onDetach方法,这个时候要把传递

              进来的activity对象释放掉

        4)Activity-->Service:

             第一种方式:绑定服务,即让Activity实现ServiceConnection接口,然后重写对应的两个方法;

             分别为:onServiceConnected与onServiceDisconnected,前者为绑定成功时调用,后者为绑定失败时调用在Activity中

             定义 目标Service.Binder 的binder对象,在onServiceConnected方法中获取目标Service中的Binder对象;然后在启动

             Service的时候,使用setData传递数据

            第二种方式:intent传值

            在Activity中,进行startService时,使用intent.putExtra(key,value),startService(intent)传递数据;然后在Service的

            onStartCommand中接收从Activity中传递过来的值,直接调用intent.getStringExtra(key);

            优点是:代码简单  缺点是:只能传递一些简单的数据,性能上没有太多优势

            第三种方式:使用callBack+handler

            在Service类中添加一个公开的接口callBack,在接口内部定义一个onDataChange的方法,同时在Service类中的Binder方

            法内,添加一个方法getMyService用于让外部Activity获取到当前Service的绑定;在Activity实现ServiceConnection接口,

            在onServiceConnected中获取Service的绑定,实现回调接口;获取数据之后,使用Handler发送消息,在主线程中接收,

            并更新相应的UI界面


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值