Android之路—初章
Android有四大组件Activity,Service,Content provider,Broadcast receiver。今天浅说最基本组件—-Activity。
基本组件—Activity
当用户打开一个程序,必然启动了一个Activity,Activity的活动默认在栈的最前端,当跳转到其他页面时,会执行一些方法,将当前Activity回收或者销毁,这些活动都基于一个机制—-Activity的生命周期。
1.onCreate
调用Activity时最先实现的方法,可以用来加载布局,初始化一些数据。
2.onStart
当Activity可见时,调用该方法,但此时仍在创建Activity,当前页面不可和用户进行交互。
3.onResume
当Activity获取当前用户焦点时,调用该方法,此时当前页面可以和用户进行交互。
4.onPause
当Activity不再可见,调用该方法,在这个生命周期状态下,可以做一些存储数据、停止动画的工作。
5.onStop
当Activity已经停止,一般在onPause之后调用,停止的Activity等待被重新调用,或者等待被销毁。
6.onRestart
当Activity重新从不可见到可见,调用该方法,之后接着执行onCreate方法。
7.onDestroy
当Activity彻底销毁,生命周期的最后一个函数回调,在该方法可执行一些资源释放,数据传递等方法。
这里写了一个demo,用Logcat的方式体现Activity的生命周期,在每个方法中打印Logcat(Logcat之后会单独写一篇博客积累)。
当打开一个Activity时
回到主屏幕时
再次打开Activity时
当在后台完全关闭Activity时
Activity有着不同的启动模式,不同启动模式对应不同的功能,可满足一些开发时的需求。
1.standard(默认启动模式,标准启动模式)
启动一个Activity,并在新任务栈中创建一个实例,该Activity属于该栈中。
2.singleTop(栈顶复用模式)
如果该Activity在当前任务栈的栈顶,调用方法顺序:onPause() → Resume();
如果该Activity不在任务栈的栈顶(哪怕它在该任务栈中),则在新一个任务栈重新创建实例,该Activity属于新栈中(与标准启动模式相同)。
3.singleTask(栈内复用模式)
在当前任务栈寻找该Activity,若存在直接复用,调用onRestart() → onStart() → onResume();
并让该栈中的其他Activity出栈,其他Activity先调用onPause,在当前Activity创建开始聚焦后,其他Activity接着调用onStop() → onDestroy();
若当前任务栈不存在该Activity,在新任务栈中创建实例,该Activity属于新的任务栈(标准启动模式相同)。
4.singleInstance(全局唯一模式)
在当前任务栈寻找该Activity,若存在直接复用,调用onRestart() → onStart() → onResume();
该栈中其他Activity不出栈只停留在后台,先调用onPause();
在当前Activity创建开始聚焦后,其他Activity接着调用onStop();
若当前任务栈不存在该Activity,在新任务栈中创建实例,该Activity属于新的任务栈(标准启动模式相同)。
组件连接纽带—Intent
每个Activity之间需要有链接,而Android靠Intent这个对象来链接。这里写一个demo来体现这种连接。
这个demo只有两个Activity,命名为MainActivity和Main2Activity,布局文件中有两个按钮,id分别为
btnToMain和btnToMain2。
按钮btnToMain 点击监听事件 Java代码:
1 | /*点击监听事件方法*/ |
在AndroidManifest.xml配置文件中,activity android:name=”.Main2Activity”中添加子标签
1 | <activity android:name=".Main2Activity" |
在Main2Activity中添加静态字符串
1 | public static final String ACTION = "android.intent.action.Main2Activity"; |
按钮btnToMain2 点击监听事件 Java代码:
1 | bt2.setOnClickListener(new View.OnClickListener() { |
1.ComponentName(显式启动)
设置Intent两个参数, 包名和将要打开的组件名.
1 | public ComponentName(String pkg,String cls)); |
2.Action(隐式启动)
Action是Activity的行动,其属性的值为一个字符串,它代表了系统中已经定义了一系列常用的动作。
例如 : ACTION_MAIN:Android Application的入口,每个Android应用必须且只能包含一个此类型的Action声明.
3.Category(隐式启动)
Category是Activity的类型,比如一个程序的主入口Activity的Category就是MAIN。
其中在AndroidManifest.xml配置文件添加的子标签中
一个app一个类型的Action只能标记一个,但是category却可以添加多个(至少有一个,没有就要设置为DEFAULT)
例如 : CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。
4.Data(隐式传值)
1 | intent = new Intent(Intent.ACTION_VIEW); |
在配置文件中设置Data属性,以供其他软件调用
1 | <intent-filter> |
5.Type(隐式传值)
只有data属性为null的时候,type属性才有效,如果data属性不为null,系统会自动根据data中的协议来分析data的数据类型,而不会去管type
原函数:
1 | public Intent setType(String type) { |
调用:
1 | intent.setAction(Intent.ACTION_VIEW); |
6.Extra
data.putExtra(“标识符”,数据源);
为data数据添加额外数据。
7.flag
即四大启动模式。