Activity的基本理解

 Activity:是Android的四大组件之一,主要处理界面的显示相关。


Activity的生命周期:

Activity的基本理解_第1张图片
来自:http://blog.csdn.net/liuhe688/article/details/6733407

onCreat():在Activity创建的时候执行,接受参数Bundle savedInstanceState,一般用于初始化数据。(savedInstanceState参数说明:主要用于当Activity被异常杀死的时候,用于保存数据);

onStart():在Activity由不可见变为可见的时候调用,一般不进行任何操作;

onResume():Activity变成可见,获得焦点与用户进行交流,前台状态。

onPause():Activity可见,但是没有获得焦点,属于暂停状态,不处于栈顶当时可以看见界面;

onStop():Activity变成完全不可间的时候调用,进入后台状态;一般可以释放一些消耗资源的程序;

onDestory ():Activity被销毁的时候调用;


图中具有三个向上的流程进行一一说明:

第一条  onStop()——onRestart()——onStart();

当Aacitvity没有被回收,不可见,或则说没有处于栈顶时,被再次启动的时候就会执行第一条流程。

第二条 onPause()——onResume()

Activity由失去焦点状态进入获得焦点状态(AlderDialog消失的时候会进行第二条流程)

第三条 onStop()——onCreat();

Activity当处于后的时候,被系统意外回收时会进行第三条流程;

在系统回收之前会调用onSaveInstanceState();保存示例状态;在onCreat()时候调用onRestartInstanceState(BundlesavedInstanceState)

onSaveInstanceState()执行时机:调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。


如何销毁一个Acitvity?

直接调用finish()方法,进行销毁。

会执行的生命周期:onPause(),onStop(),onDestory().


BaseActivity的说明:一般在开发中,所有的Activity都不会直接继承自Activity,而是继承自BaseActivity,而BaseActivity继承自Activity;可以在BaseActivity中写一些接口,动态权限的添加,沉浸状态栏等;


Activity的启动模式:详细见网址:http://blog.csdn.net/guolin_blog/article/details/41087993

首先是启动模式的设置:可以manifest清单文件中通过launchModel来设置,也可以通过Intent       中添加flag来完成启动模式的设置。当两种模式都设置了启动模式限制,Intent的更优先(广播机制中也是动态注册广播优先于静态注册的广播);

        在具体说明启动模式的时候,先说以下,系统管理Activity的管理基本过程,系统通过返回站的模式管理,是一种先进后出的模式。

在manifest文件中进行模式设置:


standard:默认启动模式

当我们没有在清单文件中设置Activity的启动模式的时候,我们采用的就是这种启动模式;

这总模式是指,当我们启动设置这个模式的Activity,就会新建一个Activity实例,并切放置在栈顶。

singleTop:栈顶唯一

当我们启动Activity的时候首先会进行判断,该activity是否位于站定,如果位于站定,则不创建新的Acitvity,如果不位于栈顶,则创建新的实例,并放入到栈顶;

singleTask:任务唯一

启动自身Activity的情况:当启动自身Activity的时候,就会先判断任务栈是否具有当前Activity,如果没有新创建,并至于栈顶。如果具有该Activity,就会将该Activity之前所有的Activity出栈,将改Activity至于栈顶。

启动其他应用的Activity:当启动他应用设置singleTask的Activity的时候,就会新启动一个任务,并将其放到栈顶;

singleInstance:单实例

启动的Activity会新建一个任务,并且这个任务中只有这一个Activity,当这个Activity启动其他Activity的时候会放在其他任务中。

Intent的启动模式说明:??


Activity的沉浸模式:http://blog.csdn.net/guolin_blog/article/details/51763825

几种功能:首先隐藏或则透明状态栏,隐藏或则透明导航栏,真正的沉浸式模式。


Intent:在Activty,Service,Broadcast之间都有使用。

Intent在Activity之间的使用:分为显示Intent与隐式Intent两种;

首先说的显示Intent的使用方法:

Intent  intent=new Intent(MainActivity.this,SecondClass.class);

//参数说明:第一个参数为上下问对象(context),当然也可以是其子类;

//第二个参数为想要启动的目标活动

startActivity(intent);

//启动相应意图,完成跳转


隐式意图:隐式意图比显示意图含蓄的多;

不明确指出我们要启动哪一个活动,而是指定了一系列更为抽象的action与category等信息,然后交给系统去分析,并启动相应的activity;

基本行动原理解析:当在新建Intent的时候会指定action与category;action在每个Intent中只能有一个,而category可以又多个(当写的时候为默认android.intent.category.DEFAULT);在AndroidManifest中activty中添加标签,在intent-filter中添加action与category;只又intent中的action与category同时与intent-filter中的action与category匹配的时候,这个活动就会相应;

代码示例:

//发送隐士意图

Intent intent=new Intent("com.this.action");

//采用构造方法添加action

intent.addCategory("com.this.category");

//通过addCategory添加category,如果不添加也会又默认的category;

startActivity(intent);

//接受隐式意图的Activity

需要在AndroidManifest中添加intent-filter

隐式意图的其他使用方法:可以用于开启其他应用的activity。

(当我们用系统的浏览器,或则打电话,或则分享到微信,都是启动其他应用的activity)

举例说明:启动系统浏览器

Intent   intent=new  Intent("Intent.ACTION_VIEW");

intent.setData(Uri.parse("http://www.baidu.com"));

startActivity(intent);

关于setData()方法说明:

在intent-filter标签中有个类似与category的标签,

用于指定当前活动能够响应什么数据。

配置具体内容:

android.scheme-用于指定数据的协议部分,例如http协议;

android.host--用于指定数据的主机部分,如上例中的wwwbaidu.com.

android.port--用于指定端口号;

android.path--用于指定端口好后的部分

android.mineType--指定可以处理的数据类型;

只有标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够相应该Intent。(不过一般Intent不会指定过多内容,浏览器只指定了协议)

代码示例:

Intent  intent=new  Intent("Intent.ACTION_VIEW");

intent.setData(Uri.parse("http://www.baidu.com"));

startActivity(intent);

只有action category data  同时匹配时候,才会启动相应的activity;


向下一个活动传递数据:Intent不但可以启动其他活动,也可以向下一个活动传递数据,也可以将数据返回到上一个。

intent提供了一系列的putExtra()方法的重载,可以把我们要传递的数据存在Intent中,启动另一活动的时候,只需要把这些数据再从Intent中取出来。

代码示例:

发送示例:

String data="Hello SecondActivity";

Intent  intent=new Intent(FirstActivity.this,SecondActivity.class);

//通过键值对的方式进行数据存储,前方是键,用于取出数据的时候使用,后面的参数为具体数值;

intent.putExtra("extra_data",data);

startActivity(intent);

接受示例:

Intent intent=getIntent();

String data=intent.getStringExtra("extra_data");


返回参数给上一个活动:

启动Activity中

startActivityForResult()方法接受两个参数,第一个参数还是Intent,第二个参数是请求码,用于相应后判断数据来源。

Intent  intent=new Intent(MainActivity.this,SecondClass.class);

startActivityForResult(intent,1);

被启动的activity中,需要写入setResult(),该方法具有两个参数:第一个参数用于想上一个活动返回处理结果,一般只使用RESULT_OK或则RESULT_CANCELED这两个值,第二个参数为Intent-只用于传递数据

Intent  intent=new Intent();

intent.putEXtra("data","back_1");

setReuslt(RESULT_OK,intent);

finish();

启动Activity中

从写onActivityReuslt(),一共接受3个参数,第一个参数为requestCode请求码,在startActivityForResult();中的第二个参数,第二个resultCOde,即我们setResult()中返回数据结果。第三个为setResult()的第二个参数,也是返回的数据结果载体;

一般在onActivityReuslt()中通过requestCode判断是哪个Activity返回的数据,然后通过resultCode判断值的来源判断处理结果是否成功,进行相应处理;

你可能感兴趣的:(Activity的基本理解)