2016-06-06安卓之Activity

來源:互聯網
上載者:User

標籤:

1.  Activity中的lable是指activity的名字,如果此activity還指定了:以下intentfilter,那麼這個介面就會在案頭建立捷徑,捷徑名字就是這個activity的lable<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>Category:指定意圖的類別, Launcher是在案頭建立捷徑。Intent-filter子節點:添加意圖過濾,可以通過隱式意圖啟動。可以在案頭產生捷徑,應用程式的入口。注意: Intent傳遞的資料過多可能會造成跳轉速度極慢甚至黑屏一會,不要用Intent傳遞過多的資料,會影響到應用程式的使用。##1. Activity的建立和銷毀(*)1. 資訊清單檔內容:電話  瀏覽器 資訊清單檔內容    許可權    <uses-permission android:name="android.permission.CALL_PHONE"/>    <uses-permission android:name="android.permission.INTERNET"/><intent-filter>     <action android:name="android.intent.action.MAIN" />     <category android:name="android.intent.category.LAUNCHER" /></intent-filter><activity android:name="com.guyulei.activity2.MyBrowserActivity"            android:label="周紅偉瀏覽器"            android:icon="@drawable/xiaowei">category:類型,部門,種類,類別,類目; [邏,哲]範疇; 體重等級scheme:策劃,圖謀;   首碼 filter :濾波器; 濾光器; 濾色鏡; [化] 過濾器;            <intent-filter >                <action android:name="android.intent.action.VIEW"/>                <category android:name="android.intent.category.DEFAULT"/>                <category android:name="android.intent.category.APP_BROWSER"/>                <data android:scheme="http"/>                <data android:scheme="https"/>                <data android:scheme="about"/>                <data android:scheme="javascript"/>            </intent-filter>        </activity>小結: 每一個類對應自己的activity  綁定自己的xml檔案  activity在清單中註冊隱式跳轉(隱式意圖跳轉)(效率低) 多用於不同App之間Activity的跳轉,通過匹配目標Activity的intent-filter來實現的跳轉意圖過濾器匹配規則    1. 如果一個Activity有多個intent-filter,那麼我們只需要匹配其中的任意一個即可    2. 如果intent-filter中有action、category、data,必須全部匹配    3. 如果category是<category android:name="android.intent.category.DEFAULT" />情形下,可以不進行匹配。    4. 如果有多個category,那麼取其任意一個匹配即可    5. 如果data有多個,那麼取其任意一個匹配即可    6. 如果data有兩個,並且屬性還不一樣,那麼這個data的兩個屬性必須全部匹配MainActivity:隱式跳轉:打電話Intent.ACTION_CALLpublic void callPhone(View view){        //2        Intent intent = new Intent();        //3        intent.setAction(Intent.ACTION_CALL);        //4        intent.addCategory(Intent.CATEGORY_DEFAULT);//預設可以不寫        //5        intent.setData(Uri.parse("tel:15958121433"));        //1        startActivity(intent);    }隱式跳轉:瀏覽器Intent.ACTION_VIEWpublic void callBrowser(View view){        //2        Intent intent = new Intent();        //3        intent.setAction(Intent.ACTION_VIEW);        //4        intent.addCategory(Intent.CATEGORY_DEFAULT);        //5        intent.setData(Uri.parse("http://www.baidu.com"));        //1        startActivity(intent );    }不同工程之間隱式跳轉   前提需要知道資訊清單檔中的activity的資訊intent.setDataAndType  有data和type時注意不能共存type  的格式  MIME 訊息能包含文本、映像、音頻、視頻以及其他應用程式專用的資料。類型/子類型資訊清單檔:附:第二個工程的清單  data android:mimeType    <activity             android:name="com.guyulei.activity02.MyActivity">            <intent-filter >                <action android:name="com.guyulei.zhonghongwei.TEST"/>//自己隨便設定 跳轉時配置一樣即可                <category android:name="android.intent.category.DEFAULT"/>                <data android:scheme="guyulei2zhouhongwei"/>//傳輸時的資料格式   首碼+:                <data android:mimeType="gu/zhou"/>     //資料 的類型            </intent-filter>        </activity>        /*      * 不同工程activity之間進行跳轉     */    public void skip2guyulei(View view) {        Intent intent = new Intent();        //setAction 對應資訊清單檔中activity的action  一致即可        intent.setAction("com.guyulei.zhonghongwei.TEST");        intent.addCategory("android.intent.category.DEFAULT");        /*         * setData  setType 不共存         * 使用setDataAndType 解決         * intent.setData(Uri.parse("guyulei2zhouhongwei:周小偉"));           intent.setType("gu/zhou");         */        intent.setDataAndType(Uri.parse("guyulei2zhouhongwei:周小偉"), "gu/zhou");        startActivity(intent );    }MyBrowserActivity:拿到intent的資料,intent啟動此activity,此activity得到intent的資料intent的資料從哪來?在清單裡面設定資料的格式 在啟動intent的時候 加上資料 //intent.setData(Uri.parse("http://www.baidu.com"));getIntent()intent.getDataString();protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_my);        //擷取誰啟動了這個activity的intent,資料在intent內        //intent.setData(Uri.parse("http://www.baidu.com"));        Intent intent = getIntent();        String dataString = intent.getDataString();        Log.d(TAG, dataString);        Toast.makeText(this, "您瀏覽的網頁是:"+dataString, Toast.LENGTH_SHORT).show();    }第二個工程中MyActivity第一個工程中的intent 來到第二個工程  帶來第二個工程格式 的 資料intent.setData(Uri.parse("guyulei2zhouhongwei:周小偉"));intent.setDataAndType(Uri.parse("guyulei2zhouhongwei:周小偉"), "gu/zhou");protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //擷取周小偉activity 中在intent內封裝的資料        //data 和type 分開拿        Intent intent = getIntent();        Uri data = intent.getData();        String type = intent.getType();        Log.d(TAG, "data="+data+"....."+"type="+type);        Toast.makeText(this, "data:"+data+"type:"+type, Toast.LENGTH_SHORT).show();    }2. 顯式跳轉  常用於工程內部顯示跳轉(顯跳轉)(效率高)直接通過目標Activity的位元組碼進行的跳轉,多用於本APP內不同Activity之間。如果Activity只想被顯示跳轉,那麼沒有必要配置intent-filter。跳轉代碼  startActivity(new Intent(this, SecondActivity.class));資訊清單檔 註冊activity<activity             android:name="com.guyulei.activity03.MySecond"></activity>MainActivity:  intent.setClass(this, MySecond.class);        intent.putExtra("name", "顧雨磊");android:text="我是第一個activity,跳到second"public void skip2second(View view) {        Intent intent = new Intent();        intent.setClass(this, MySecond.class);        //顯示跳轉 給second傳資料        intent.putExtra("name", "顧雨磊");        intent.putExtra("age",26);        intent.putExtra("lover", "周小偉");        startActivity(intent);    }MySecond:拿資料:拿資料先拿意圖intent  getIntent()intent.getStringExtra("name");protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);        /*         * 顯示傳遞資料   拿資料先拿意圖intent         */        Intent intent = getIntent();        String name = intent.getStringExtra("name");        int age = intent.getIntExtra("age", 0);        String lover = intent.getStringExtra("lover");        Log.d(TAG, "name="+ name +"age= "+ age+"lover="+lover);        Toast.makeText(this, "資訊是:"+"name="+ name +"age= "+ age+"lover="+lover, Toast.LENGTH_LONG).show();    }}MainActivity:   startActivityForResult(intent , REQUESTCODE); 以需求得到結果的方式跳到secondREQUESTCODEandroid:text="跳到sec並擷取其傳回值" android:onClick="skip2secondforResult"//跳轉到second並擷取其銷毀時的傳回值    public void skip2secondforResult(View view) {        Intent intent = new Intent();        intent.setClass(this, MySecond.class);        startActivityForResult(intent , REQUESTCODE);    }MySecond:android:text="返回資料給mainactivity並銷毀自己"RESULTCOE   setResult(RESULTCOE, data );//誰啟動我,我就將資料返回給誰,並銷毀自己    public void back(View view) {        Intent data = new Intent();        //封裝資料進行返回        data.putExtra("data", "這是secondactivity給您返回的資料");        setResult(RESULTCOE, data );        finish();    }MainActivity:  onActivityResult//調用回呼函數擷取second返回的資料    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        Log.d(TAG, "requestCode="+requestCode+"resultCode="+resultCode+"data="+data);        if(requestCode==REQUESTCODE){            if(resultCode==1){                //拿到資料                String result = data.getStringExtra("data");                Log.d(TAG, "result="+result);                Toast.makeText(this, "second銷毀時返回的資料是:"+result, Toast.LENGTH_LONG).show();            }        }    }3. Intent可以攜帶的資料類型喲哪些?    1. 8種基礎資料型別 (Elementary Data Type)以及其對應的數組形式    2. String 以及其數組    3. 實現Serializable介面的對象    4. 實現Parcelable介面的對象4. Serializable和Parcelable的區別?    1. 前者是java裡面的,後者是Google自己開發的    2. 前者效率低一些,後者效率高一些,專門用於Android系統中的序列化    3. 用法完全不同,前者很簡單,後者很複雜。5. Activity跳轉時傳遞資料並擷取    1. intent.putXXX();    2. getIntent().getXXXExtr("key",defaultValue);6. 當跳轉到的Activity銷毀時返回資料(必須會)    1. 在MainActivity中,啟動SecondActivity的時候,不能用startActivity()了,        使用startActivityForResult(intent, requestCode)    2. 在SecondActivity中,在finish前,調用setResult(responseCode,Intent data);方法設定即將要返回的資料,然後finish()    3. 在MainActivity中覆寫onActivityResult(),在該函數中擷取SecondActivity設定的資料##3. Activity的生命週期(*****)###3.1 Activity的三種狀態1. Resumed(running運行狀態):如果Activity位於螢幕的最前端,並且擷取到了使用者的焦點。    1. 完全可見,可互動。    2. 不會被系統殺死的,直到OOM,然後崩潰。2. Paused(暫停狀態):被另外一個Activity給覆蓋了,但是自己依然部分可見(透明的,或者比較下)。    1. 部分可見,不可互動。    2. 當系統內容及其不足的時候,會被系統殺死。3. Stopped(停止狀態):如果當前Activity被另外一個Activity給完全覆蓋了(後台Activity)。    1. 完全不可見,更不可互動    2. 當系統需要釋放記憶體的時候,就會殺死。###3.2生命週期方法1. onCreate2. onStart3. onResume4. onPause5. onStop6. onDestroy7. onRestart    <activity            android:screenOrientation="reverseLandscape"            android:configChanges="orientation|keyboardHidden|screenSize"            android:name=".MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity             android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"            android:name="com.guyulei.activity04.MySecond"></activity>讓Activity成為對話方塊樣式  在資訊清單檔中給指定的Activity配置如下參數即可:  android:theme="@android:style/Theme.Dialog"讓Activity成為透明的  在資訊清單檔中給指定的Activity配置如下參數即可:  android:theme="@android:style/Theme.Translucent"##4 橫豎屏切換時的生命週期模擬器橫豎屏切換:(Fn)+Control+F11 預設情況下,會將當前Activity完全銷毀,然後重新建立。讓Activity橫豎屏切換時,不改變他的生命週期在資訊清單檔中,配置如下屬性 android:configChanges="orientation|keyboardHidden|screenSize"固定Activity的方向通過設定檔1. android:screenOrientation="landscape"水平2. android:screenOrientation="portrait"垂直通過代碼1. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);2. 誰後配置誰生效##5. Activity的啟動模式(****)Activity是被ActivityManager用棧結構管理的。###5.1 Activity的四種啟動模式1. standard(標準的也是預設的,如果不配置就是標準的):    1. 特點:傻瓜式的,每啟動一個Activity,就重新建立一個全新的Activity,然後壓到棧頂。2. singleTop     1. 特點:如果當前棧頂配置了singleTop的Activity已經存在,那麼不會重新建立。3. singleTask    1. 特點:保證當前棧只有一份Activity執行個體,如果有其他Activity將其壓住,他想上位是通過將其他Activity全部彈棧的方式。4. singleInstance    1. 特點:一個Activity獨享一個任務棧。

2016-06-06安卓之Activity

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.