说明:因为之前学习过一些Android开发相关的内容,所以这个阅读笔记主要是对编者自己知识的梳理,主要侧重于不太擅长的地方,欢迎大家进来参观O(∩_∩)O
1.初识Android
1.1 Android系统架构
四层架构,五块区域
1.Linux内核层 -提供底层驱动
2.系统运行库层
特性支持: C/C++库,如SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,Webkit库提供浏览器内核支持(webkit主要是Safari和Chrome的浏览器渲染引擎)
运行时库: Java核心库、Dalvik虚拟机(作用是使app运行在核心进程中,它对手机性能、CPU性能有限等情况做了处理)
3.应用框架层 -各种API
4.应用层 -app
1.2 Activity
(1)Activity的跳转
使用Intent跳转有显式和隐式两种方式,其中隐式跳转方式如下:
(隐式保存方式相当于通过匹配Action和Category来跳转Activity)
1.在AndroidManifest.xml清单文件中注册被跳转Activity的action和category:
注意:intent-filter中必须加上默认的catagory,也就是下面的语句,不然会报错
<category android:name="android.intent.category.DEFAULT"/>
2.在MainActivity中写跳转语句:
Intent的隐式跳转
其它隐式跳转:
-
跳转到网页
action写为:
跳转网页的Action
Activity中写为:
跳转网页的隐式Intent写法
其中Intent实例的参数要跟AndroidManifest.xml中的一致
最后的效果:
打开网页的效果
最后的效果显示了可以打开网页的所有程序
清单文件中data标签可以配置的内容有:
android:scheme---数据协议(如http)
android:host---主机名(如www.baidu.com)
android:port---端口
android:path---域名之后的路径
android:mimeType---例如(text/html)
- 当前页面返回到上一个页面时的传值
创建一个只用于传值的Intent,并用setIntent(RESULT_OK,intent)
通常,从当前页返回上一页用button来实现,如果用手机上的返回键返回上一页时,可以通过onBackPressed()方法来解决这个问题:
@override
public void onBackPressed(){
Intent intent=new Intent();
intent.putExtra("data_return","data_content");
setResult(RESULT_OK,intent);
finish();
}
(2)活动的生命周期
活动的生存期
onCreate()---活动的初始化操作,如加载布局、绑定事件等。
onStart()---活动由不可见变为可见时
onResume()---活动由不可见变为可见或部分可见变为可见时
onPause()---用于启动或恢复另一个活动时,可以在这里释放CPU资源,保存数据(但是方法要快,不能影响新的栈顶活动的使用),或者部分可见时
onStop()---完全不可见时
onRestart()---活动重新被启动时
- 当把一个Activity变为Dialog时,需要在AndroidManifest.xml文件中添加一个属性:
android:theme="@android:style/Theme.Dialog"
- 活动被回收之前,调用onSavaInstanceState()可以携带Bundle类型的参数用于保存数据。
(3)活动的启动模式
standard(默认)、singleTop、singleTask、singleInstance
可以通过在AndroidManifest.xml中给activity添加android:launchMode属性来选择启动模式
standard:启动相同的Activity时,不管返回栈中有没有该活动,都会入栈,每次都会创建新实例
singleTop:启动活动时如果发现返回栈的栈顶是该活动时,可以直接使用它(不是栈顶时会再创建一个)
singleTask:让某个活动在应用程序的整个上下文中只存在一个实例,如果返回栈中有该实例,该实例上的活动会统统出栈,直接使用该实例
调用之前的活动时会调用OnRestart()方法,当该实例完全显示出来后,原来的Activity会调用onDestroy()方法
singleInstance:单独的返回栈管理该活动,其它应用程序就可以到这里来访问它,解决了共享活动实例的问题,通过getTaskId()
可以获取到当前活动所在的返回栈的Id,可以查看哪些活动在同一个栈中,哪个在单独的栈中,来验证singleInstance模式;
当按下back键时,会显示同栈内的栈顶活动,其次显示其它栈的栈顶元素,也是同理~
根据书上的例子来理解,更好理解哦~
(4)活动的最佳实践
实践1:
快速判断当前页面是哪个活动:
方法:
- 创建一个继承Activity的BaseActivity类
-
在BaseActivity中重写onCreate()方法,并在其中加入如下语句:
指明当前页面所在的activity的语句 -
其它Activity原先继承Activity,全部改为继承BaseActivity
这样,当运行页面时,Logcat页面就会有如下字样:
logcat相应日志
实践二:
随时退出程序
一个神奇的可以完成随时退出功能的类:
package com.example.test.foralltest;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
/**
* 可以随时随地退出程序
*/
public class ActivityCollector {
public static List<Activity> activityList = new ArrayList<>();
/**
* addActivity
* @param activity
*/
public static void addActivity(Activity activity) {
activityList.add(activity);
}
public static void removeActivity(Activity activity) {
activityList.remove(activity);
}
public static void finishAll() {
for (Activity activity : activityList) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
}
然后按如下方法调用
如果想在哪里直接退出应用,可以直接调用Activity Collector.finishAll()方法
实践三:
方便调用下一个Activity(适用于不是只有自己开发的情况)
在被调Activity中写一个:
庆祝第一篇文章完结,撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。
网友评论