在接入Android SDK的时候,了解了Android多线程后, 我们来了解一下AndroidManifest.xml 和Activitiy.

在Android开发中,无main函数,这个让C\C++\C#程序员不太适应,但是Android提供了Main的入口的,这个就是配置AndroidManifest.xml。

 

  • AndroidManifest.xml

    权威的AndroidManifest.xml请直接看Google官方文档,非常详细和及时。

image

 

其中在开发Android SDk接入,需要配置 android:configChanges–keyboard|keyboardHidden|screenSize|orientation。 即当屏幕翻转等变化后,Activity不会“死掉”,会调用Activity.onConfigurationChanged() 方法.

另外,jar包中的activity,都是需要在AndroidManifest.xml声明的。

其中这个属性比较重要  android:launchMode(Activity加载模式)

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式

Activity有四种加载模式:

  • standard (默认)
  • singleTop
  • singleTask
  • singleInstance

standard:就是intent将发送给新的实例,所以每次跳转都会生成新的activity。

singleTop:也是发送新的实例,但不同standard的一点是,在请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例

singleTask:和后面的singleInstance都只创建一个实例,当intent到来,需要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。

singleInstance:

首先说明一下task这个概念,Task可以认为是一个栈,可放入多个Activity。比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity,那在它的界面上调用其他的Activity也只是在这个task里面。

  • Activity

    Activity概念,可以简述为用户可见的一个大视图的主布局框架,在Android中,每次只能看到一个Activity,两个Activity切换会采用Task任务栈方式调度。

    Activity的生命周期

image

    奇怪的是Android屏幕旋转,也是需要销毁Activity的,故需要预先存储、加载数据的。
    为了实现outlook左右布局,左侧导航+右侧切换视图效果,需要用到FrageMentActivity子类。
      最后,在Activity之间通信,有2种办法:
      显示Intent

    //显示方式声明Intent,直接启动SecondActivity

    Intent it = new Intent(MainActivity.this,SecondActivity.class);

    //启动Activity

    startActivity(it);

      隐式Intent

    // 实例化Intent

    Intent it = new Intent();

    //设置Intent的Action属性

    it.setAction("com.android.activity.MY_ACTION");

    // 启动Activity

    startActivity(it);

    隐式Intent之所以设置Action后,即可找到可能的Activity,是因为Activity的intent-filter属性对外公开了其可以处理的Action。如系统默认的拨打电话、播放音乐等Activity等。

    image