1. Intent
a. 显式意图
必须要指定开启组件的具体信息(包名,组件名,组件的class);同一个应用程序里面 自己激活自己的东西,推荐使用显式意图。效率高
Intent intent = new Intent(this, OtherActivity.class);
Intent intent = new Intent();
intent.setClassName("com.android.deskclock", "com.android.deskclock.DeskClock");
b. 隐式意图
不同应用程序里,激活别人的应用,或者让自己的某个界面希望被别人激活,推荐使用隐式意图;1,查询系统里面所有的activity,看看是不是有满足条件的activity,2,有,判断多少,只有一个直接启动,如果有多个,列表方式显示出来供选择,3如果没有,应用程序异常终止,activity not found exception;
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
intent.setAction("android.intent.action.SENDTO");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("sms:110"));
Intent intent = new Intent();
intent.setAction("com.example.yulan");
intent.addCategory(Intent.CATEGORY_DEFAULT);
//intent.setData(Uri.parse("playgame:dota2"));
//如果data里加了mimitype,则必须setType
//intent.setType("vnd.android.cursor.item/haha");
//值得注意的是setData和setType方法会清除掉对方;所以调用下面的方法:
intent.setDataAndType(Uri.parse("playgame:dota2"), "vnd.android.cursor.item/yeah");
2. Activity生命周期
onCreate: activity被创建的时候被调用
onStart:activity变成用户可见时被调用
onResume: 界面获取焦点时被调用
onPause: 界面失去焦点时被调用
onStop: 界面不可见时被调用
onDestroy: activity销毁时被调用
onrestart : onstop之后,重新启动activity时调用,后面接着onstart
利用生命周期可以干的事情:
- 可以在开启程序时,在onstart方法判断网络情况,未连接的话可以跳转到系统的网络设置界面。
-横竖屏切换会重新执行生命周期的方法
如果指定android:screenOrientation="landscape“ 或者
android:configChanges="orientation|keyboardHidden|screenSize"可以避免
可以根据屏幕宽度getWindowManager().getDefaultDisplay().getWidth() 或者高度,如果高大于宽,就是竖屏
3. 任务栈 Task Stack
维护用户的界面(activity)体验,记录了App开启的activity情况。App所有的界面都关闭了,但进程还在后台运行。
在Manifest里进行设置:android:launchMode="singleInstance"
standard:开启一个就压入栈,返回一次就出栈一个activity
singleTop:避免同一个界面被重复的开启;浏览器书签界面设置为这类模式可以防止被攻击,或者避免糟糕的用户体验
singleTask在:浏览器开了很多标签的话,解析html等消耗资源太大,避免创建过多的activity,节约资源
singleInstance: 开启一个新的任务栈,这个任务栈里只有一个activity存在,如果这个activity被开启,把这个任务栈放在前面。整个手机系统里只创建一个实例任务栈,如来电activity,还有有道词典的快速查词的界面。
昨天太累了,今早才将昨天的学习情况记录下来,睡之前解决了一个问题,要坚信事出必有因,一定要找出根源。