Activity的生命周期

1.实验任务

1. 验证Activity的生命周期

2. 掌握显式intent和隐式intent

3. 掌握Activity之间的跳转及数据传输

4. 理解Fragment的使用

2.实验内容

1. 验证Activity的生命周期

2. 实现显式intent和隐式intent

3. 实现Activity之间的跳转及数据传输

4. 运行川菜菜谱案例并分析其源码实现

3.实验步骤

(1)、验证Activity的生命周期

请参考教材P89,重写MainActivity的onStart()、onResume()和OnStop()等方法,验证在以下情况下,Activity调用这些方法的顺序(通过logcat查看日志):

当第一次运行程序时,可以发现程序启动后依次调用了onCrete()方法、onStart()方法、onResume()方法。当调用onRseume()方法之后程序不在向下运行、这时程序处于运行状态,等待与用户进行交互

接下来点击模拟器的后退键,发现Logcat中有新的日志输出,发现程序调用了onDestory()方法,当调用该方法后Activity被销毁并清理出内存

虽然代码中重写了onRestart()方法,但是因为程序中只有一个Activity,无法进行从停止状态到再次启动状态,所以在Activity生命周期中没有进行调用。

(2)、启动MainActivity

(3)、手机横竖屏切换

当没有设置configChanges属性的值时,Activity生命周期会依次调用onCreate()、onStart、onResume()方法,当由竖屏切换横屏时,调用的方法依次是onPause()、onStop()、onDestory()、onCreate()、onStart()和onReseume()的方法

(4)、在AndroidManifest.xml中配置MainActivity的android:configChanges="keyboardHidden|orientation|screenSize"属性后,手机横竖屏切换:

在进行横竖屏切换时,首先会调用onDestroy()方法销毁Activity,之后调用onCreate()方法重建Activity,这种模式在实际开发中会对程序有一点的影响,例如,用户在界面上输入信息时进行了横竖屏切换,则用户输入的信息会被清除。为了解决这种情况,可以通过configChange属性进行设置。

2、实现显式intent和隐式intent

新建SecondActivity(使用Java类继承Activity的方式实现),参考教材P93-94,分别基于显式intent和隐式intent实现MainActivity跳转至SecondActivity。

一、基于显式intent,从MainActivity跳转到SecondActivity

(1)、创建Activity

选中cn.itcast.activityvasic包,右键新建Java class,创建一个SecendActivity类,并继承Activity

当在MainActivity的onCreate()方法中启动SecondActivity时,会抛出异常

 

(2)、配置Activity

由于创建的每个Activity都必须在清单文件AndroidManifest.xml中配置才能生效,因此我们需要将SecondActivity配置在<application></application>标签中

 

运行结果

二、基于隐式intent,从MainActivity跳转到SecondActivity

(1)在project2程序的清单文件中配置SecondActivity的action为“cn.itcast.START_ACTIVITY”

(2)在project1程序的MainActivity中开启SecondActivity的实例代码如下:

运行结果

 

3实现Activity之间的跳转及数据传输

参考教材P95-97,实现MainActivity和SecondActivity之间的数据传输。

1. MainActivity跳转至SecondActivity时,将数据“xxxx(你的名字)传过去了”传过去。

使用Intent的putExtra()方法传递数据

通过putExtra()方法将传递的数据存储在Intent对象后,如果想获取该数据,可以通过getXxxExtra()方法实现。例如,在MainActivity中跳转到SecondActivity时,通过Intent传递“xxxx(你的名字)传过去了”

此时在SecondActivity中可以通过getXxxExtra()方法来获取传递回来的数据

 

 

运行结果

2. SecondActivity跳回MainActivity时,将数据“xxxx(你的名字)传回来了”传回来。

这个实验我用显式intent和隐式intent分别在两个Activity之间进行切换

在两个Activity分别创建了两个Button

 

然后对两个button进行监听,实现点击button就向另一个Activity切换同时向另一个Activity传递数据

清单文件AndroidManifest.xml中.

由MainActivity向SecondActivity转换采用隐式intent

由SecondActivity向MainActivity转换采用显示intent

然后在控制台打印数据

完整代码:

MainActivity.java

package cn.itcast.activitybasic;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button btn_one;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = getIntent();
        String ac = intent.getStringExtra("data");
        System.out.println(ac);

        Button btn_one = (Button)findViewById(R.id.btn_one);
        btn_one.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent intent1 = new Intent();
                intent1.setAction("cn.itcast.activity.START_ACTIVITY");
                intent1.putExtra("data","xxxx(你的名字)传过去了");
                startActivity(intent1);
            }
        });
    }
}

SecondActivity.java 

package cn.itcast.activitybasic;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class SecondActivity extends AppCompatActivity {
    private Button btn_two;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);

        Intent intent = new Intent(this, MainActivity.class);
        Intent intent1 = getIntent();
        String name = intent1.getStringExtra("data");
        System.out.println(name);

        Button btn_two = (Button)findViewById(R.id.btn_two);
        btn_two.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                intent.putExtra("data","xxxx(你的名字)传回来了");
                startActivity(intent);
            }
        });
    }
}

运行结果:

 

点击按钮1

 

点击按钮2

 

实现了Activity之间的跳转、数据传递和数据回传

4.实验总结

通过这次实验掌握了显式intent和隐式intent的知识,掌握了Activity之间的跳转及数据传输原理,理解了Fragment的使用。通过重写Activity的七个方法:onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()、onRestart() 理解Activity的生命周期,并充分理解普通活动与对话框活动之间的区别。点击活动按钮与按back键返回时,通过LogCat观察活动的进行。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值