Android Activity的探讨——入门

今天抽了一天的时间来探讨Activity的学习内容(这里的话会有入门篇,中级篇,以及高级篇),学了Java2EE的孩子们应该知道里面有个servlet,其实activity也是类似的一个东西。废话不多说了,请看大屏幕,精彩都在后面。

本文涉及的参考博客地址:http://www.cnblogs.com/liuning8023/p/3771382.html

Activity的三个状态:

1、Activity 状态
当位于屏幕前台时(位于当前任务堆栈的顶部),它是活动或运行状态,也就是系统调用onStart()到OnStop()之前这一段时间。

2、Paused状态
当它失去焦点但仍然对用户可见时,它处于暂停状态就是系统调用onCreate()之后到onStop()之前这段时间。即是:在它之上有另外一个activity。这个activity也许是透明的,或者未能完全遮蔽全屏,所以被暂停的activity仍对用户可见。暂停的activity仍然是存活的(它保留着所有的状态和成员信息并保持着到window
manager的连接),但当系统处于极低内存的情况下,仍然可以杀死这个activity。

3、Stopped状态
如果它完全被另一个activity覆盖是,它处于停止状态也就是系统调用onStop()之后到onDestory之前这一段时间。它仍然保留所有的状态和成员信息。然而,它不在为用户可见,所以它的窗口将被隐藏,如果其它地方需要内存,则系统常常会杀死这个activity。

七大方法:

一、onCreate() 在activity生命周期开始时被调用,一般在这里对整个activity经行初始化和布局定义。是必须重写的一个方法

二、onStart() 当activity对用户即将可见的时候调用。

三、onRestart() 当activity从停止状态重新启动时调用

四、onResume()activity将要与用户交互时调用此方法,此时activity在activity栈的栈顶,用户输入已经 可以传递给它

五、onPause()当另外一个activity恢复并遮盖住此activity,导致其对用户不再可见时调用。一个新activity启动、其它activity被切换至前景、当前activity被销毁时都会发生这种场景。

六、onStop()当另外一个activity恢复并遮盖住此activity,导致其对用户不再可见时调用。一个新activity启动、其它activity被切换至前景、当前activity被销毁时都会发生这种场景。

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

Google提供的流程

这里写图片描述

具体分析内容

这里的话,我只想说具体的几个内容,详情和注释还是自己看我的demo吧。

一、新建一个activity,我比较懒,都是这样建的,因为这样不用我自己一个一个去注册activity。

这里写图片描述
这里写图片描述
如果你自己建就 extends Activity
然后到清单文件中注册

        <activity
            android:name=".One_MainActivity"
            <!--或者-->          android:name="com.example.baseadapter.One_MainActivity"
        </activity>

二、继续代码

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 One_MainActivity extends Activity {
    private int param = 1;
    private static final String TAG = "日志显示-------------------";
    private Button button1;
    private Button button2;

    // Activity创建时被调用

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.one_activity_main);
        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        button1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(One_MainActivity.this,
                        Two_MainActivity.class);
                startActivity(intent);

            }
        });
        button2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(One_MainActivity.this,
                        Three_MainActivity.class);
                startActivity(intent);

            }
        });
        Log.i(TAG, "onCreate");
    }

    // Activity创建或者从后台重新回到前台时被调用
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart");
    }

    // Activity从后台重新回到前台时被调用
    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
    }

    // Activity创建或者从被覆盖、后台重新回到前台时被调用

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

    }

    // Activity窗口获得或失去焦点时被调用,在onResume之后或onPause之后
    /*
     * @Override public void onWindowFocusChanged(boolean hasFocus) {
     * super.onWindowFocusChanged(hasFocus); Log.i(TAG,
     * "onWindowFocusChanged called."); }
     */

    // Activity被覆盖到下面或者锁屏时被调用
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause");
        // 有可能在执行完onPause或onStop后,系统资源紧张将Activity杀死,所以有必要在此保存持久数据
    }

    // 退出当前Activity或者跳转到新Activity时被调用
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop");
    }

    // 退出当前Activity时被调用,调用之后Activity就结束了
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy");
    }

    /**
     * Activity被系统杀死时被调用. 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死.
     * 另外,当跳转到其他Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态. 在onPause之前被调用.
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putInt("param", param);
        Log.i(TAG, "onSaveInstanceState called. put param: " + param);
        super.onSaveInstanceState(outState);
    }

    /**
     * Activity被系统杀死后再重建时被调用.
     * 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity.
     * 这两种情况下onRestoreInstanceState都会被调用,在onStart之后.
     */
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        param = savedInstanceState.getInt("param");
        Log.i(TAG, "onRestoreInstanceState called. get param: " + param);
        super.onRestoreInstanceState(savedInstanceState);
    }

}

当你创建一个activity并显示时
这里写图片描述
当你点击启动第二个activity时
这里写图片描述
当你启动第四个activity时
这里写图片描述
当你通过键盘返回到主界面时
这里写图片描述

1、在这里的换还有几个小细节,我们创建一个activity后,如果你点击转屏会怎么样呢。
这里写图片描述

2、糟了,女朋友突然来电话了,你却在看片。那么这个时候你的activity应该怎么做呢,当然是电话一来,看片就暂停哦,电话一结束,看片继续、、、、(这里就涉及到了生命周期的调用问题了。)

这里不好解释,越解释越复杂。还是偷偷看demo吧。
操作步骤是,开启activity——点击”GO two”——点击键盘返回

对了,这里附上音频调用的方法

下载现ogg\map3等等格式的音频文件,那么如何在android程序中播放。

解决方法:
1. 在res文件夹中新建raw文件夹,将音频文件放入raw文件夹中。
2. 在要触发播放的地方添加如下代码:

MediaPlayer mediaPlayer;  
mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.qqlove);  
mediaPlayer.start();  

补充

一、activity的两种启动方式

            1、  Intent intent = new Intent(当前类名.this,
                        跳转类名.class);
                startActivity(intent);
//ComponentName(组件名称)是用来打开其他应用程序中的Activity或服务的。
ComponentName componentName = new ComponentName(当前类名.this, 其他程序类名.class);
                intent.setComponent(componentName);
                startActivity(intent);

二、启动系统中的其他应用

                Intent intent = new Intent();
                // 进网页
                // intent.setAction(Intent.ACTION_VIEW);
                // Uri uri = Uri.parse("http://www.baidu.com");
                // 进相册
                // intent.setAction(Intent.ACTION_GET_CONTENT);
                // intent.setType("image/*");
                // 发短信
                // intent.setAction(Intent.ACTION_SEND);
                // intent.setType("text/plain");
                // intent.putExtra(Intent.EXTRA_TEXT, "Android activity 入门");
                // 打电话
                intent.setAction(intent.ACTION_VIEW);
                Uri uri = Uri.parse("tel:110");
                intent.setData(uri);

                startActivity(intent);

时间关系就不分析了,如有疑问可以留言或者看我的demo
地址:http://download.csdn.net/detail/zhan1350441670/8953657

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章