第二章内容主讲活动,显/隐式意图,Activity管理
一、在活动中使用Menu菜单
在res目录下新建一个menu文件夹,res目录-->New-->Directory
,输入文件夹名称menu。接着在该文件夹下再新建一个名叫main的菜单文件,右击menu文件夹-->New-->Menu resource file
,然后在main.xml文件中添加代码:
然后在Activity中重写如下两个方法:
image.png
二、显式/隐式Intent
显式Intent很常用,就不说了。
隐式Intent,不但可以启动自己程序内的组件,还可以启动其他应用程序的组件,这使得Android多应用程序之间的功能共享成为了可能。比如要跳转到SecondActivity,需要在清单文件中对SecondActivity配置<intent-filter>标签:
然后在Activity中这样写:
image.png
每个Intent只能指定一个Action,但却能指定多个category,可以调用Intent中的addCategory()方法添加category。
此外,我们还可以在<intent-filter>标签中配置一个<data>标签,用于精确地指定当前活动能够响应什么类型的数据:
1.android:scheme,用于指定协议部分,如http
2.android:host,用于指定数据的主机名部分,如www.baidu.com
3.android:port,用于指定数据的端口部分,紧随在主机名之后
4.android:mimeType,用于指定可处理的数据类型,允许使用通配符的方式进行指定
除了http协议,还有geo表示显示地理位置,tel表示拨打电话等等
三、随时随地退出程序
可以创建一个ActivityCollector类作为活动管理器,该类中维护了一个静态的集合用于存放Activity,并提供了addActivity(Activity activity)、removeActivity(Activity activity)、finishAll()方法。我们只需要在BaseActivity的onCreate()方法中调用addActivity(this),在onDestroy()方法中调用removeActivity(this)就可以对Activity进行管理,在你想要退出程序的地方,只需要调用finishAll()方法即可。当然还可以在销毁所有活动后再加上杀掉进程的代码,保证程序完全退出:
android.os.Process.killProcess(android.os.Process.myPid());
四、其他知识
1.Activity的四种启动模式:
1.standard:默认
2.singleTop:单一顶部模式
3.singleTask:单一任务模式
4.singleInstance:单一实例,新建任务栈且栈中只有这一个活动
2.Activity的生命周期:
onCreate()、(onRestar())onStart()、onResume()、onPause()、onStop()、onDestroy()
3.给上一个Activity返回数据:
第一个Activity中不要用startActivity(),而是用startActivityForResult(intent,requestCode);在第二个Activity返回数据时,要写上setResult(RESULT_OK,intent);记得finish();在第一个Activity中重写onActivityResult()方法,参数中Intent中就包含了第二个Activity返回的数据
4.活动被回收了怎么办
当活动进入停止状态,可能被系统回收,可以通过重写onSaveInstanceState()回调方法,该方法保证在活动被回收之前一定会被调用,所以我们可以在该方法里对数据进行保存。然后我们就可以在onCreate()方法的参数中的Bundle对象中获取保存的数据,并对数据进行恢复
小tips:
getClass().getName()和getClass().getSimpleName()的区别:
比如:com.android.test包下有一个类叫User,内部类Inner
getName()打印的是全类名:com.android.test.User
getSimpleName()打印的是类名:User
而getCanonicalName()一般情况下等同于getName(),但是在数组和内部类中,就不一样了:
getCanonicalName()打印的是:xxx.Inner
getName()打印的是:xxx$Inner
getSimpleName()打印的是:Inner
网友评论