Android基础之Activity初步认识(生命周期)

2017-03-21  本文已影响0人  DA蝈蝈

介绍

当我们新建了一个Android工程,最先看到的是一个叫MainActivity的类。什么也不改在手机上运行出来是一个显示有Hello World这几个字母的界面。也就是我们一开始看到的就是Activity这个东西,所以我们就先从Activity这里开始说。Activity是Android里面承载页面的类,页面布局是在对应的XML文件里面写。当然,要看我们怎么用,我们可以用一个Activity实现一个dialog窗口形式的东西,也可以用它实现我们常见的遮罩层,看个人在做项目的时候的需求。咱们这里今天只讲讲Activity的基础的东西,建议刚学习Android的人使用Eclipse ADT,比较容易入手,下面都是基于ADT开发工具来讲解的。

怎么打开一个新的Activity

在我们看到hello world页面的时候,我们会想这个页面是工具自动生成的,就只有这么几行字。那我想自己写一个页面,要怎么写呢,写完要怎么打开这个页面呢。我先介绍一下:

选中MainActivity所在的包,右键点击会弹出个菜单,依次New->Class,会弹出一个界面让你定义Activity的名字,SuperClass是要继承的基类,我们选择android.app.Activity。还有其他的如下图:

5233117-f3324666d65cb0a9 (1).png

建完之后会发现类里面啥没有,可以先把MainActivity里面的这段代码拷贝过来j就可以了:

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

下面我们在把XML布局文件定义一下,选中res下的layout文件夹,右击依次New->Android Xml File,填好xml布局文件的名字后,选择LinearLayout,点Finish,如下图:

5233117-4aa95b76f9f28207.png

我们让他在页面上显示一行字“我的Activity”,可以在activity.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:textSize="20sp"
        android:text="我的Activity"/>
    
</LinearLayout>

布局文件和Activity都写完了,我们还要把布局文件和Activity关联起来。再把Activity1里面的这句代码改一下:

setContentView(R.layout.activity_main);

修改之后:

setContentView(R.layout.activity1);

很好理解,就是把布局文件引入进来,到这一步就我们新写的Activity就完成了。然后把Activity1加入到配置文件AndroidManifest.xml里:

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            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="com.example.jsdemo1.Activity1"/>
        
    </application>

在MainActivity里面加个按钮,用来点击打开Activity1.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <TextView
        android:id="@+id/helloword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    
    <Button 
        android:id="@+id/openact1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/helloword"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:text="打开Activity1"/>

</RelativeLayout>

mainactivity里面改一下:

public class MainActivity extends Activity {
    
    private Button openact1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        openact1 = (Button) findViewById(R.id.openact1);
        openact1.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Intent it = new Intent(MainActivity.this,Activity1.class);
                MainActivity.this.startActivity(it);
            }
        });
    }

}

注意onClick方法里面的两行代码就是打开Activity1的作用。

Activity的生命周期

到现在我们已经能够简单添加自己的页面了,然后做页面跳转了。但我们发现,手机上只显示了我们写的众多页面中的一个,那么有个疑问,当手机显示其中一个页面的时候,其他页面是出于一个什么状态呢?从一个页面跳转到一个新的页面后,老的页面有没有被销毁?当我们点击手机的返回键返回到老页面后,新的页面有没有销毁?页面跳转的时候,老页面和新页面都执行了哪些操作呢?这就是Activity的生命周期,规范了一个Activity的生老病死,从创建到销毁。先上图:

clipboard.png

onCreate():创建一个Activity,这个是Activity必须override的一个方法,方法里面会执行初始化Activity的主题、数据恢复,对页面元素的初始化等。
onStart():这阶段Activity已有可视化界面,但是页面还没有加载完全,再详细调用了什么操作先不用管。如果从新页面返回或者从后台返回,会重新执行这个方法。
onResume():这个方法执行完后,界面就加载完全了,页面上的按钮,输入框这些元素都可以进行操作了,整个页面也获取到了焦点。如果从新页面返回或者从后台返回,会重新执行这个方法。
onPause():点击页面上一个按钮或者其他方式触发的页面跳转,及按下home键和返回键,再跳转前首先执行这个方法。注意如果在Activity上弹了一个提示框,再把提示框取消掉,执行流程是onPause->onResume
onStop():在执行onPause后,如果Activity已不可见,会执行此方法。
onRestart():在执行onStop后,如果Activity没有被销毁,而且要回到这个Activity时,将会触发此方法,此后依次执行onRestart->onStart->onResume
onDestroy():在执行onStop后,如果Activity被销毁,比如按了返回键,就会执行此方法来销毁Activity释放内存资源。凡是执行了onDestroy方法的Activity,想重新显示,必须onCreate->onStart->onResume
注意图上的左边,意思是,如果手机内存不够或者有更高优先权的应用需要内存,系统将会销毁回收Activity。比如在打开Activity后按了home键,应用就一直在后台运行,Activity此时并没有执行onDestroy方法销毁,但是如果系统需要内存,系统会杀死该Activity释放内存资源。销毁后应用从后台返回,会重启应用。

下面举一个Activity生命周期的行为例子:
Activity创建:onCreate--->onStart---->onResume()
如果按下Home键,onPause--->onStop
再次进入此程序,onRestart----->onStart--->onResume
此时,返回键:onPause--->onStop---->onDestory

最后,文中如有任何错误的地方,欢迎评论纠错(__) 。

上一篇下一篇

猜你喜欢

热点阅读