- 活動被創建執行的第一個方法
- 隱藏標題欄
- 在活動中使用Toast
- 銷燬活動
- 活動的四種狀態和七種回調方法
- 對話框式的活動
- 在活動回收之前保存數據
- 知曉當前是在哪一個活動
- 隨時隨地退出程序
- 啓動活動的最佳寫法
活動被創建執行的第一個方法
- public class HelloWorldActivity extends Activity {
- //onCreate()是活動被創建時必定執行的方法
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.hello_world_layout); //引入hello_world_layout.xml佈局
- }
隱藏標題欄
在onCreate方法中
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);//必須在setContentView()之前執行,不然會報錯
- setContentView(R.layout.hello_world_layout); //引入hello_world_layout.xml佈局
- }
在活動中使用Toast
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.first_layout);
- Button button1 = (Button) findViewById(R.id.button_1);
- button1.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(FirstActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();
- }
- });
- }
第二個參數是文本內容
第三個參數是顯示的時長
>有兩個內置的常量可以選擇Toast.LENGTH_SHORT和Toast.LENGTH_LONG
銷燬活動
直接使用finish(),例如點擊這個按鈕銷燬這個活動。(一般和返回鍵一起使用)
- button1.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- finish();
- }
- });
按下返回鍵會調用onBackPressed()方法。
活動的四種狀態和七種回調方法
Android是使用任務(Task)來管理活動的,一個任務就是一組存放在棧裏的活動的集合,這個棧也被稱作返回棧(Back Stack)
每個活動在其生命週期中最多可能會有四種狀態。
1.運行狀態
2.暫停狀態
3.停止狀態
4.銷燬狀態
Activity類中定義了七個回調方法,覆蓋了活動生命週期的每一個環節。
1.onCreate()
2.onStart
3.onResume()
4.onPause() 這個方法的執行速度一定要快,不然會影響到新的棧頂活動的使用。
5.onStop()
6.onDestroy()
7.onRestart()
完整生存期:onCreate()和onDestroy()方法之間所經歷的
可見生存期:onStart()和onStop()方法之間所經歷的
前臺生存期:onResume()和onPause()方法之間所經歷的
對話框式的活動
- <activity android:name=".NormalActivity" >
- </activity>
- <activity android:name=".DialogActivity" android:theme="@android:style/ Theme.Dialog" >
-
//指定主題是對話框式,xml文件的代碼和普通的一樣,啓動這個活動是不會遮擋整個屏幕。
- </activity>
在活動回收之前保存數據
- @Override
- //這個方法會保證一定在活動被回收之前調用
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- String tempData = "Something you just typed";
- outState.putString("data_key", tempData);
- }
- @Override
- //Bundle參數一般情況下都是null,但是如果有通過onSaveInstanceState()方法來保存數據的話,這個參數會存有之前所保存的全部數據。
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- if (savedInstanceState != null) {
- String tempData = savedInstanceState.getString("data_key");
- }
- }
Bundle可以結合Intent一起傳遞數據。
知曉當前是在哪一個活動
新建一個AaseActivity類繼承自Activity類並重寫它的方法
- public class BaseActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.d("BaseActivity", getClass().getSimpleName()); //獲取當前實例的類名
- }
- }
隨時隨地退出程序
新建一個ActivityCollector類作爲活動管理器
- public class ActivityCollector {
- public static List<Activity> activities = new ArrayList<Activity>();
- public static void addActivity(Activity activity) {
- activities.add(activity);
- }
- public static void removeActivity(Activity activity) {
- activities.remove(activity);
- }
- public static void finishAll() {
- for (Activity activity : activities) {
- if (!activity.isFinishing()) {
- activity.finish();
- }
- }
- }
- }
- public class BaseActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- ActivityCollector.addActivity(this);
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- ActivityCollector.removeActivity(this);
- }
- }
啓動活動的最佳寫法
在要啓動的活動中(目的活動)
- public class SecondActivity extends BaseActivity {
- public static void actionStart(Context context, String data1, String data2) {
- Intent intent = new Intent(context, SecondActivity.class);
- intent.putExtra("param1", data1);
- intent.putExtra("param2", data2);
- context.startActivity(intent);
- }
- //添加了一個actionStart()方法,在這個方法中完成了Intent的構建,另外所有SecondActivity中需要的數據都是通過actionStart()方法的參數傳遞過來的,然後把它們存儲到Intent中,最後調用startActivity()方法啓動SecondActivity。
- ……
- }
- button1.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- SecondActivity.actionStart(FirstActivity.this, "data1", "data2");
- }
- });