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

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