今天抽了一天的時間來探討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