Day12、Android四大组件之Activity

Activity是用户和程序交互的界面

一、如何创建Activity?

1.创建一个继承Android的Activity类
2.重写onCreate()方法
3.设置显示布局
4.在使用前,要在AndroidManifest文件中,进行注册

二、Activity的生命周期(7个方法)

1.onCreate();创建
2.onStart();运行
3.onResume();获取焦点
4.onPause();失去焦点
5.onStop();暂停
6.onDestroy();销毁
7.onRestart();再次运行

三、Activity的四种活动状态

1.活动状态(Active/Running) Activity处于界面最顶端,获取焦点
2.暂停状态(Paused) Activity失去焦点,但用户可见
3.停止状态(Stopped) Activity完全被遮挡,但保留所有的状态和成员信息
4.非活动状态(Killed)Activity被停止,被销毁
5.在代码中通过Log日志来具体看其生命周期

1.MyActivity.java代码

package com.zero.activitydemo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MyActivity extends Activity {

    final String TAG="tag";

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

        Log.i(TAG, "MyActivity-->onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "MyActivity-->onStart");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "MyActivity-->onResume");
    }

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

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

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

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

}

2.main_activity.xml代码

<RelativeLayout 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.oldtogether.activitytest.MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:textColor="#f00"
        android:textSize="32sp"/>

</RelativeLayout>

3.注册自定义的Activity,设置为主接口,即AndroidManifest.xml代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.oldtogether.activitytest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.oldtogether.activitytest.MyActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
6.从运行的Log日志可以看出来:
1.在启动的过程中先调用onCreate、onStart、onResume,这三个方法,当退出(按返回键的时候)的时候会调用onPause、onStop、onDestroy

这里写图片描述
这里写图片描述

2.从启动到后台,然后再在后台运行,直接贴图

这里写图片描述
这里写图片描述

四、实现简单的页面跳转

1.在activity_main.xml中添加一个按钮
<RelativeLayout 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.oldtogether.activitytest.MainActivity" >

    <Button 
        android:id="@+id/btn_show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动第二个Activity"/>

</RelativeLayout>
2.在MyActivity.java中为按钮添加事件监听器(使用匿名内部类的方法)代码如下:
package com.oldtogether.activitytest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MyActivity extends Activity {

    final String TAG = "tag";

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

        Button btn = (Button) findViewById(R.id.btn_show);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MyActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });

        Log.i(TAG, "MyActivity-->onCreate");
    }

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

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

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

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

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

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

}
3.重新创建一个SecondActivity.java(让此类继承Activity并重写onCreate方法)
package com.oldtogether.activitytest;

import android.app.Activity;
import android.os.Bundle;

public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_show);
    }
}
4.重新创建一个简单的线性布局即:Second_show.xml,包含一个TextView来显示界面内容,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是第二个Activity"
        android:textColor="#0ff"
        android:textSize="32sp"/>

</LinearLayout>
5.在AndroidManifest.xml中注册新建的SecondActivity,并让MyActivity为主接口
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.oldtogether.activitytest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.oldtogether.activitytest.MyActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity 
            android:name=".SecondActivity"/>

    </application>

</manifest>
6.运行结果

1.启动MyActivity时调用的方法(创建、运行、获得焦点)
这里写图片描述
2.启动SecondActivity时,MyActivity所调用的方法(失去焦点、暂停)
这里写图片描述
3.返回SecondActivity时,回到了MyActivity调用的方法(再次运行、运行、又获得焦点)
这里写图片描述
4.退出MyActivity调用的方法(失去焦点、停止、销毁)
这里写图片描述
5.所有方法调用全图
这里写图片描述

五、启动和关闭Activity

1.启动Activity方法一:在AndroidManifest.xml文件中进行注册,将其设置为程序主入口,这样在运行该Progect是自动启动我们设置主入口的XX_Activity;
2.启动Activity方法二:用startActivity()方法来启动Activity,在意图中,需要指明主调用(XX_Activity.this)和被调用的Activity(XXX_Activity.class),核心代码如下,。
Intent intent=new Intent(XX_Activity.this,XXX_Activity.class);
startActivity(intent);
3.关闭Activity,使用Activity类中提供的finish()方法,即一个裸露(无参数,无返回值)的方法:public void finish();只需要在相应的事件中调用该方法即可。

六、心得总结

1.onResume,获得焦点,即MyActivity在手机桌面上;
2.onPause,失去焦点,有时候当我们玩游戏的时候,突然来了个电话,则此方法被执行,虽然失去焦点,但是其在后台运行的,即将游戏的状态持久的保存起来;
3.onCreate()和onPause()是最常重写的两个方法,即创建时候出现什么复杂业务逻辑,失去焦点后出现什么业务逻辑;
4.如果当前Activity不是主活动,那么执行 finish()方法后,将返回调用它的那个Activity;否则,将返回主屏幕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值