總網頁瀏覽量

2013年2月17日 星期日

activity_lifecycle( I)

activity:在智慧型手機打開應用程式(google map、email、看圖程式)之後,每個視窗都是activity。一個應用程式(Application)可以有多個activity
每個應用程式都有MainActivity相當於C語言的主函式。
每當開啟新的activity(開新視窗)那麼之前的activity進入stop狀態
但是並非終止(kill)而是將activity存放在系統記憶體堆疊之中


Create Activity:

每個開發者寫的activity必須繼承Activity這個類別(extend Activity)。
在這個activity(不知道只有MainAcitvity還是所有的activity)
必須實作(callback methods)
當activity發生create(新開視窗)、stop(跳到其他視窗)、
rsume(跳回原本視窗)、destroyed(關閉視窗,)會呼叫這些callback methods

其中兩個最重要的callback methods是:
onCreate():
activity之中必須有這個method.每當開啟activity一定會先呼叫這個funcction
最重要的是必須呼叫setContentView()顯示使用介面的版面配置

onPause():
使用者離開activity時候會呼叫這個function;離開不代表關閉activity,有可能只是暫時停用。

Implement user interface(實作介面):
android看到的按鈕、文字框框、選項框框等這些東西,在android視為"物件"又稱作Widgets(小裝飾品),這些物件由View這個類別衍伸而來。
我們可以用這些物件來設計視窗的版面,這種動作有個術語稱作
layout(布局、版面配置)。
layout也是物件,也是容器。可以裝其他的layout或者Widgets
layout由ViewGroup衍伸而來(ViewGroup是View的子類別),

除了在xml檔案建立view物件,我們也可以在.java檔案插入view物件







activity lifecycle觀念是很"重要"的"基本"觀念

Android使用Activity的觀念,將執行中的應用程式分成五大類
1.foreground process
2.visible process
3.background process
4.empty process
5.service process


android會依照這五類別判斷執行中的應用程式activity是屬於哪一類型,給予不同生命週期。意味著在android系統中即使使用者沒有將程式關閉,當程式處於某種process類別時,有可能自動被android給關掉(kill)。

因此程式存在與否並非由應用程式本身自行決定,而是由android透過運行機制,依照那些畫面或訊息對使用者最重要或系統目前有多少記憶體可用,來決定是否關掉程式。





底下的protected都是用overriding技巧


package com.example.liearlayouttest;

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.TextView;

public class MainActivity extends Activity {

    private TextView red;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        red =(TextView)findViewById(R.id.red);
       
        red.setOnClickListener(new OnClickListener(){
       
            public void onClick(View arg0){
                toPage2();
               
            }
       
        });
       
        red.setText(" "+red.getWidth());
    }
    private void toPage2(){
       
        Intent it = new Intent();
        it.setClass(this,Page2.class);
        startActivity(it);
       
       
    }
   
    protected void onStart(){
        super.onStart();
       
        red.setText(""+red.getWidth());
    }

    protected void onResume(){
       
        super.onResume();
       
        red.setText(" "+red.getWidth());
       
       
    }
    protected void onPause(){
        super.onPause();
       
        Log.i("yyp",""+red.getWidth());
    }

    protected void onStop(){
        super.onStop();
       
       
        Log.i("yyp",""+red.getWidth());
       
    }
   
    protected void onRestart(){
       
        super.onRestart();
        Log.i("yyp",""+red.getWidth());
 //紀錄執行的過程並顯示出來      
       
       
    }
   
   
}

沒有留言:

張貼留言