Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Day12、Android四大组件之Activity

$
0
0

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;否则,将返回主屏幕。

作者:OldTogether 发表于2016/12/7 21:45:24 原文链接
阅读:22 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>