Android基础知识之四大组件Activity(三)多个Activity交互的生命周期与设计思想

通过一个Demo来验证:

首先创建一个Project,更改主布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".A_Activity"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="A_Activity" />

    <Button
        android:id="@+id/btnJumpB"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="跳转到B_Activity"/>

</LinearLayout>

接着创建一个新的Activity,命名为B_Activity,并创建它的布局文件(与主布局文件大致相同)代码如下:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.daxiangzai.androiddemo.moreactivitylifecycle.B_Activity"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="B_Activity" />

    <Button
        android:id="@+id/btnJumpA"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Back"/>

</LinearLayout>

我们再来更改MainActivity(我的命名:A_Activity)与新建Activity(我的命名B_Activity)。

A_Activity代码如下:

package com.daxiangzai.androiddemo.moreactivitylifecycle;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;


public class A_Activity extends ActionBarActivity {

    private String TAG = "TAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);

        //给按钮设置监听事件
        findViewById(R.id.btnJumpB).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 跳转到 B_Activity
                startActivity(new Intent(A_Activity.this, B_Activity.class));
            }
        });

        //输出日志
        Log.i(TAG, "A_Activity onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "A_Activity onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "A_Activity onResume");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "A_Activity onRestart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "A_Activity onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "A_Activity onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "A_Activity onDestroy");
    }
}
B_Activity代码如下:

package com.daxiangzai.androiddemo.moreactivitylifecycle;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;


public class B_Activity extends ActionBarActivity {

    private String TAG = "TAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);

        //给按钮设置监听事件
        findViewById(R.id.btnJumpA).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 结束 B _Activity
                finish();
            }
        });

        //输出日志
        Log.i(TAG, "B_Activity onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "B_Activity onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "B_Activity onResume");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "B_Activity onRestart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "B_Activity onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "B_Activity onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "B_Activity onDestroy");
    }
}

最后别忘了在配置文件中注册B_Activity(在application标签中添加):
<activity
            android:name=".B_Activity"
            android:label="@string/title_activity_b_" >
        </activity>

Ok,我们来运行程序。

首先当我们一运行程序,在Logcat中就会弹出:


当我们单击按钮跳转到B_Activity时,又会弹出:

当我们点击按钮,结束B_Activity时,又会弹出:


在当我们点击返回键,结束Application时,会弹出:


从上面总结一下两个Activity的运行过程,大致是这样的:



        由此可见,当从一个Activity结束返回或跳转到另一个Activity时,首先调用当前ActivityonPause方法,在依次调用新ActivityonCreateonStartonResume,其次在依次调用当前ActivityonStoponDestroy(结束Activity时才调用)方法。


       我们来思考两个问题:

 1)为什么要先调用当前ActivityonPause方法?

2)为什么不先调用当前ActivityonStoponDestroy方法而是先执行新的ActivityonCreateonStartonRestart方法?


第一个问题是这样的,我们可以试想一下,当我们正在播放音乐时,突然来电话了,若没有结束播放音乐的onPause方法,则会发生音乐与来电铃声同时响起的情况发生,影响用户的体验。

接下来第二个问题,若在启动新的Activity前调用当前ActivityonStoponDestroy方法时,手机会出现一段时间的黑屏状态,从而会影响用户的体验。


资源代码:http://download.csdn.net/detail/lxawcf/8954251

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值