美文网首页Android知识
第一行代码(二)

第一行代码(二)

作者: radish520like | 来源:发表于2017-12-20 23:53 被阅读0次

    第二章内容主讲活动,显/隐式意图,Activity管理

    一、在活动中使用Menu菜单

      在res目录下新建一个menu文件夹,res目录-->New-->Directory,输入文件夹名称menu。接着在该文件夹下再新建一个名叫main的菜单文件,右击menu文件夹-->New-->Menu resource file,然后在main.xml文件中添加代码:

    image.png
    然后在Activity中重写如下两个方法:
    image.png

    二、显式/隐式Intent

      显式Intent很常用,就不说了。
      隐式Intent,不但可以启动自己程序内的组件,还可以启动其他应用程序的组件,这使得Android多应用程序之间的功能共享成为了可能。比如要跳转到SecondActivity,需要在清单文件中对SecondActivity配置<intent-filter>标签:

    image.png
      然后在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

    下一篇文章 https://www.jianshu.com/p/0c69bb8a616d

    相关文章

      网友评论

        本文标题:第一行代码(二)

        本文链接:https://www.haomeiwen.com/subject/eranwxtx.html