Activity:是Android的四大组件之一,主要处理界面的显示相关。
Activity的生命周期:
来自:http://blog.csdn.net/liuhe688/article/details/6733407onCreat():在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>标签,在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
<activty android :name=".SecondActivity">
<intent-filter>
<action android:name="com.this.action"/>
<category android:name="com.this.category"/>
</intent-filter>
</activity>
隐式意图的其他使用方法:可以用于开启其他应用的activity。
(当我们用系统的浏览器,或则打电话,或则分享到微信,都是启动其他应用的activity)
举例说明:启动系统浏览器
Intent intent=new Intent("Intent.ACTION_VIEW");
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
关于setData()方法说明:
在intent-filter标签中有个类似与category的标签<data>,
<data>用于指定当前活动能够响应什么数据。
<data>配置具体内容:
android.scheme-用于指定数据的协议部分,例如http协议;
android.host--用于指定数据的主机部分,如上例中的wwwbaidu.com.
android.port--用于指定端口号;
android.path--用于指定端口好后的部分
android.mineType--指定可以处理的数据类型;
只有<data>标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够相应该Intent。(不过一般Intent不会指定过多内容,浏览器只指定了协议)
代码示例:
Intent intent=new Intent("Intent.ACTION_VIEW");
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
<intent-filter>
<action android:name="android.intent.action.View"/>
<category android:name="android.intent.category.DEFAULT">
<data android: scheme="http">
</intent-filter>
只有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判断值的来源判断处理结果是否成功,进行相应处理;
网友评论