Android笔记 (二) Android的核心---Activity

什么是Activity

Activity是Android应用程序核心组件中最基本的一个,是用户和程序交互的窗口,一个activity通常对应一个单独的视图,一个APP由一个或者多个activity构成,activity用于显示信息给用户,并且之间可以相互进行跳转,activity之间的跳转有返回值。

每一个activity都被定义为一个独立的类,他继承了Android中的android.app.Activity,在Activity类中将使用setContentView方法来显示由视图控件组成的用户界面,并对用户通过这些视图控件所出发的时间做出响应。

activity的四种状态

  1)激活状态,此时activity运行在屏幕前台

  2)暂停状态,此时activity失去焦点,但是用户仍然可以看到(例如这个activity上遮盖了一个透明的或者非全屏的activity)

  3)停止状态,此时activity被其他activity完全覆盖

  4)销毁状态,此时activity将会被系统清理出内存

activity的回调函数

android系统根据生命周期的不同阶段唤起对应的回调函数来执行代码,从启动到销毁一个activity有着一套有序的回调函数。

onCreate()        创建,activity初次创建时被调用,该方法中一般进行一些静态设置。

onStart()           运行,activity对用户即将可见的时候调用

onResume()     获取焦点,当activity将要与用户进行交互时候调用

onPause()         失去焦点,当系统要启动一个其他的activity时调用(在其他activity显示之前调用)

onStop()            暂停,当另外一个activity恢复并遮盖当前activity,导致其对用户不可见时调用。

onDestroy()      销毁,在activity被销毁前所调用的最后一个方法

onRestart()      重新启动

这七个方法贯穿整个activity的生命周期。

一张图来表示

activity的启动与销毁

大多数的APP都包含多个activity,不论这些activity是主activity还是为了响应用户行为而新建的,系统都会调用新的activity实例中的onCreate()方法,通常情况下我们会在onCreate()方法内声明一些UI元素或者定义一些成员变量等基本操作,但onCreate()方法中劲量少做事情,以免程序启动太久都看不到界面。

一旦onCreate()操作结束,系统会立即执行这个activity的onStart()方法和onResume()方法,最终使得activity停留在Resumed状态,直到一些因素发生变化才会改编这个状态,例如切换到另外一个activity或者退出程序。

一旦我们退出软件,系统会执行activity的onDestroy()方法,将activity从系统中完全移除,我们通常是在执行了 onPause() and onStop() 之后再调用onDestroy() 。

activity的暂停与恢复

在使用app的过程中,运行的activity经常会被其他组件挡住,例如提示电量不足的提示框等, activity可见但不可操作,这个时候activity就会调用onPause()方法进去Pause状态,这个方法会停止当前activity进行的操作,并保存那些有可能需要长期保存的信息,如果用户从暂停状态返回到activity,系统会恢复那些数据并执行onResume()方法。

activity的停止与重启

当我们从APP-A切换到APP-B之后,APP-A会调用onStop()方法,在onStop()方法中我们一般释放一些不再需要的资源

当我们从stop状态回到前台时候,会调用onRestart()方法,系统再调用onStart()方法,

activity的生命周期

activity的生命周期可以根据不同的标准分为完整生命周期、可见生命周期和前台生命周期。

从activity最初调用onCreate()方法到最终调用onDestroy()方法的整个过程称之为完整生命周期,在onCreate()方法中设置全局状态,在onDestroy()方法中释放所有资源。

从activity调用onStart()方法到调用对应的onStop()方法的过程称之为可见生命周期,在这个过程中,activity都是对用户可见的(但不一定可以操作)

从activity调用onResume()开始到调用onPause()的整个过程称之为前台生命周期,这段时间内这个activity处于其他所有activity的前面,用户可以与之进行交互。

演示

我们创建一个android工程,然后重写那些方法。

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("执行onCreate...");
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        System.out.println("执行onStart...");
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        System.out.println("执行onResume...");
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        System.out.println("执行onPause...");
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        System.out.println("执行onStop...");
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        System.out.println("执行onDestroy...");
    }

    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
        System.out.println("执行onRestart...");
    }
}

  在模拟器中运行,查看日志

然后我们按home返回到桌面

按菜单键,选择回到刚才的界面

按返回键退出activity

如何创建一个activity

新建一个activity步骤如下

1)在src中新建一个类继承activity,并重写其onCreate()方法


MyActivity.java

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

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity_layout);// 使用setContentView方法显示一个布局文件
    }
}

2)在res---layout中创建一个布局文件,用以显示界面内容


my_activity_layout.xml

<?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="这是一个TextView" />

</LinearLayout>

3)在AndroidManiFest.xml中注册这个activity

AndroidManiFest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.activitytest"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <!-- 注册一个activity -->
        <activity android:name="com.example.activitytest.MyActivity" >
            <!-- 如果是主activity,需要添加如下过滤器来告诉系统这是入口 -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

  这样,一个activity就创建成功了。

如何关闭一个activity

只要按下返回键就可以销毁当前activity,但是假如我们希望通过代码方式来销毁activity,可以使用activity类提供的finish()方法来实现。

修改一下上面的代码

MyActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity_layout);// 使用setContentView方法显示一个布局文件

        Button button = (Button) findViewById(R.id.finishActivity); // 找到这个按钮
        button.setOnClickListener(new OnClickListener() { // 给这个按钮添加一个点击事件

            @Override
            public void onClick(View v) {
                finish(); // 当点击按钮时,销毁这个activity
            }
        });
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        System.out.println("onDestroy方法被调用");
    }
}
<?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="这是一个TextView" />

    <Button
        android:id="@+id/finishActivity"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="关闭这个activity" />

</LinearLayout>

   这时候运行该程序,点击按钮,这个activity就会被关闭。

finish()和onDestroy()有什么区别

从上面的代码运行结果来看,控制台上输出了“onDestroy方法被调用”,由此可见,在执行finish()时执行了onDestroy()方法。

实际上他们的区别在于 onDestroy()是生命周期方法,是你的Activity结束的时候由Android系统调用的,你不能直接调用onDestroy()来结束你的Activity,一般做法是调用finish()

时间: 2024-10-23 17:04:53

Android笔记 (二) Android的核心---Activity的相关文章

【Android笔记】(1)—— Activity生命周期与通信

一.Activity 1.Activity状态 活动中:如果Activity在屏幕前,即是可视的,可接受用户的输入. 暂停状态:Activity失去焦点,但仍然可见. 停止状态:如果一个Activity被另一个Activity遮住了,它的状态时停止的. 2.Activity生命周期动作方法 onRestart() : Activity第一次被创建时调用,用于初始化一些数据,如View,此时处于停止状态. onStart(): Activity将要对用户可见时调用,调用后进入停止状态. onRes

Bmob移动后端云服务平台--Android从零开始--(二)android快速入门

Bmob移动后端云服务平台--Android从零开始--(二)android快速入门 上一篇博文我们简单介绍何为Bmob移动后端服务平台,以及其相关功能和优势.本文将利用Bmob快速实现简单例子,进一步了解它的强大之处. 一.准备工作 1.注册Bmob账号 在网址栏输入www.bmob.cn或者在百度输入Bmob进行搜索,打开Bmob官网后,点击右上角的"注册",在跳转页面填入你的姓名.邮箱.设置密码,确认后到你的邮箱激活Bmob账户,你就可以用Bmob轻松开发应用了. 2.网站后台创

Android笔记二十七.Service组件入门(一).什么是Service?

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.Service 1.Service简介 Service为Android四大组件之一,Service与Activity组件相似,都代表可执行的程序且有自己的生命周期,唯一的区别是Activity组件提供界面方便人机交互而Service只在后台运行且没有交互界面.Service是android 系统中的一种组件,它们都是从Context派生出来的,但是它不能自己运行,只能在后台运行,并且可以和其

Android笔记二十五.Android事件Handler消息传递机制

因为Android平台不同意Activity新启动的线程訪问该Activity里的界面控件.这样就会导致新启动的线程无法动态改变界面控件的属性值.但在实际Android应用开发中,尤其是涉及动画的游戏开发中,须要让新启动的线程周期性地改变界面控件的属性值,这就须要借助Handler的消息传递机制实现. 一.Handler类简单介绍 1.功能 Handler类主要有两个作用 (1)在新启动的线程中发送消息; (2)在主线程中获取消息.处理消息.即当须要界面发生变化的时候.在子线程中调用Handle

Android笔记二十三.Android基于事件监听器处理机制

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.Android的事件处理 Android事件处理包括两个部分:Android事件处理机制(基本)和Android消息传递机制(进阶).前者包含三种处理方式,即基于监听的事件处理.基于回调的事件处理.直接绑定到标签;后者包含两种处理方式,即Handler消息传递.异步任务处理. 1.Android的事件处理机制 (1)基于监听的事件处理方式 通常做法是为Android界面组件绑定特定的事件监听

Android笔记二十四.Android基于回调的事件处理机制

如果说事件监听机制是一种委托式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器完全消失了,当用户在GUI控件上激发某个事件时,控件自己特定的方法将会负责处理该事件. 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.View类的常见回调方法 为了使用回调机制来处理GUI控件上所发生的事件,需要为该组件提供对应的事件处理方法,而Java又是一种静态语言,我们无法为每个对象动态地添

Android笔记(三) 使得Activity之间可以跳转---Intent

什么是Intent 一个APP肯定不单单由一个Activity构成,我们在使用过程中,经常需要在多个Activity中跳转,Android中Intent可以帮我们来完成在各个Activity中跳转的功能. Intent翻译为中文为“意图,目的”,在Android中提供了Intent机制来协助应用之间的交互和通讯,Intent负责对应用中一次操作的动作.动作涉及的数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用.

Android笔记二十九. 一款简易画图板开发

一款简易画图板开发 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.画图板原理 1.直线效果 画图板表面上看起来可以随用户在触摸屏上自由的绘制任意图形,但是实际上当用户在触摸屏上移动时,两次拖动事件发生点的距离很小,多条极短的直线连接起来我们肉眼看起来就是直接了.在触摸屏绘制图形时,每条直线都是从上一次拖动事件发生点画到本次拖动事件的发生点,可以借助于Android提供的Path类来实现.然后,如果程序每次都是从上次拖动事件的发生点绘一条

【Android笔记】Android创建启动画面

每个Android应用启动之后都会出现一个Splash启动界面,显示产品的LOGO.公司的LOGO或者开发者信息.如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥的时间. 1.制作Splash界面 突出产品LOGO,产品名称,产品主要特色: 注明产品的版本信息: 注明公司信息或者开发者信息: 背景图片,亦可以用背景颜色代替: 2.处理后台资源 大多数的Splash界面都是会等待一定时间,然后切换到下一个界面: 其实,在这段时间里,可以对系统状况进行检测,比如

【Android笔记】Android与服务器数据库通信的方法

1.Android平台下与服务器数据库通信的方法 在Android平台下,连接电脑服务器的MySQL.PostgreSQL.Oracle.Sybase.Microsoft SQLServer等数据库管理系统DBMS(database management system),主要有以下两种方法: 方法1.直接连接 在Android工程中引入JDBC驱动,直接连接.(本文主要介绍此种方法) 方法2.间接连接 在服务器上用PHP+DBMS做服务器端,PHP将DBMS中的数据用json或者xml进行封装.