Activity Intent的基本使用,多个Activity的使用、跳转
主要学习内容:
1) 多个Activity的使用
2) Intent的基本作用
3) 在一个Activity启动另外一个Activity的方法
4) 使用Intent在多个Activity安卓intent用法中传递参数的方法
Activity的基本概念:
Activity 是用户唯一可以看得到的东西。几乎所有的activity都与用户进行交互,所以Activity主要负责的就是创建显示窗口,你可以在这些窗口里使用setContentView(View)来显示你自己的UIactivity展现在用户面前的经常是全屏窗口,你也可以将activity作为浮动窗口来使用(使用设置了windowIsFloating的主题),或者嵌入到其他的activity(使用ActivityGroup)中
Activity 的生命周期
J2ME MIDlet 一样,在 android 中,Activity 的生命周期交给系统统一管理。与 MIDlet 不同的是安装在 android 中的所有的 Activity 都是平等的。
Activity 的状态及状态间的转换
android 中,Activity 拥有四种基本状态:
1. Active/Runing一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
2. Paused  Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
3. Stoped  Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped状态。
4. Killed Activity 被系统杀死回收或者没有被启动时处于 Killed状态。
当一个 Activity 实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。下图说明了 Activity 在不同状态间转换的时机和条件:

1. Activity 的状态转换
 
如上所示,Android 程序员可以决定一个 Activity ,但不能决定它的,也就时说
程序员可以启动一个 Activity,但是却不能手动的结束一个 Activity。当你调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:告诉 Activity Manager Activity 实例完成了相应的工作,可以被回收。随后 Activity Manager 激活处于栈第二层的 Activity 并重新入栈,同时原 Activity 被压入到栈的第二层,从 Active 状态转到 Paused 状态。例如:从 Activity1 中启动了 Activity2,则当前处于栈顶端的是 Activity2,第二层是 Activity1,当我们调用 Activity2.finish()方法时,Activity Manager 重新激活 Activity1 并入栈,Activity2 Active 状态转换 Stoped 状态,Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被执行,Activity2 返回的数据通过 data参数返回给 Activity1
Activity
Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如下图所示:

2. Activity 的状态与它在栈中的位置关系
 
如上所示,除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个 Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。系统负责管理栈中 Activity 的实例,它根据 Activity 所处的状态来改变其在栈中的位置。
Activity 生命周期
 android.app.Activity类中,Android 定义了一系列与生命周期相关的方法,在我们自己
Activity 中,只是根据需要复写需要的方法,Java 的多态性会保证我们自己的方法被虚拟机调用,这一点与 J2ME 中的 MIDlet 类似。
public class OurActivity extends Activity {
    protected void onCreate(Bundle savedInstanceState);
    protected void onStart();
    protected void onResume();
    protected void onPause();
    protected void onStop();
    protected void onDestroy();
}
这些方法的说明如下:
i. protected void onCreate(Bundle savedInstanceState)一个 Activity 的实例被启动时调用的第一个方法。一般情况下,我们都覆盖该方法作为应用程序的一个入口点,在这里做
一些初始化数据、设置用户界面等工作。大多数情况下,我们都要在这里从 xml 中加载设计好的用户界面。例如:
setContentView(R.layout.main);
当然,也可从 savedInstanceState中读我们保存到存储设备中的数据,但是需要判断 savedInstanceState是否为 null,因为 Activity 第一次启动时并没有数据被存贮在设备中:
if(savedInstanceState!=null){
("Key");
}
i. protected void onStart()该方法在 onCreate() 方法之后被调用,或者在 Activity Stop 状态转换为 Active 状态时被调用。
ii. protected void onResume() Activity Pause 状态转换到 Active 状态时被调用。
iii. protected void onResume() Activity Active 状态转换到 Pause 状态时被调用。
iv. protected void onStop() Activity Active 状态转换到 Stop 状态时被调用。一般我们在这里保存 Activity 的状态信息。
v. protected void onDestroy() Active 被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源,清理内存等工作。

3. 这些方法的调用时机
 
此外,Android 还定义了一些不常用的与生命周期相关的方法可用:
protected void onPostCreate(Bundle savedInstanceState);
protected void onRestart();
protected void onPostResume();
Android 提供的文档详细的说明了它们的调用规则。
回页首
创建一个 Activity
android 中创建一个 Activity 是很简单的事情,编写一个继承自 android.app.Activity Java 类并在 l声明即可。下面是一个为了研究 Activity 生命周期的一个 Activity 实例:
Activity 文件:
public class EX01 extends Activity {
    private static final String LOG_TAG = SimpleName();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Create(savedInstanceState);     
        setContentView(R.layout.main);
        Log.e(LOG_TAG, "onCreate");
    }
  @Override
    protected void onStart() {
        Log.e(LOG_TAG, "onStart");
        Start();
    }
    @Override
    protected void onResume() {
        Log.e(LOG_TAG, "onResume");
        Resume();
    }
    @Override
    protected void onPause() {
        Log.e(LOG_TAG, "onPause");
        Pause();
    }
    @Override
    protected void onStop() {
        Log.e(LOG_TAG, "onStop");
        Stop();
    }
    @Override
    protected void onDestroy() {
        Log.e(LOG_TAG, "onDestroy ");
        Destroy();
    }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。