Android 基礎回顧2
阿新 • • 發佈:2019-01-03
一、Android四大元件
#非空判斷if(str!=null||str.length!=0)#<uses-permission android:name="android.permission.CAMERA" /> 加相機許可權Activity1、Activity是什麼?a:是android的四大元件之一b:提供UI互動的場所c:可以充滿螢幕,也可以懸浮在其他activity之上d:一個應用通常由多個activity組成e:一個activity可以開啟任一個activity2、如何建立一個Activity建立其子類(或現有子類),在其重寫由於系統呼叫的回撥方法,最重要的是a) onCreate()二、Activity的啟動模式及Intent跳轉以及Android中的視訊播放
#URL 統一資源定位符 地址#URI 統一資源識別符號 idURI分為 scheme 協議 host 服務端 prot 埠號 path 之後的路徑1、任務和回退棧任務:任務是執行特定作業時與使用者互動的一系列Activity,遵循先進後出原則堆疊中的Activity永遠不會重新排列開啟Activity進入任務,返回按鈕則彈出任務回退棧:任務會依次進入到回退棧中,也遵循先進後出原則2、Activity啟動模式 4s開發中作用:Activity複用,減少記憶體消耗,提高效能,避免使用者多次點選返回按鈕,無法退出##Activity複用:1,singleTop模式,當前Activity處於棧頂,再次呼叫,會複用 2,singleTask模式下,Activity已經存在,再次呼叫會複用 3,singleInstance模式下,Activity已經存在,再次呼叫會複用##此方法在本Activity複用時呼叫:可以通過此方法進行Activity重新整理工作 protected void onNewIntent(Intent intent) { super.onNewIntent(intent); }設定啟動模式:1)、在清單檔案中,給指定的Activity設定啟動模式,android:launchModea:standard預設模式,每次啟動的Activity都會建立一個例項,進入任務,遵循後進先出原則b:singleTop頂部單一模式,如果設定此模式的Activity在棧頂,重複呼叫本Activity,不會建立新 的Activity,如果不處於棧頂,那麼和standrad模式一樣c:singleTask任務棧中單一模式,如果設定此模式的Activity在任務存在,呼叫時,將該Activity複用,並且遵循任務棧不可重複排列原則,將該Activity之上的Activity全部彈出d:singleInstance設定此模式的Activity會單獨存在一個任務棧中,如果再次呼叫,會複用原來建立的任務棧,並且任務棧也遵循後進先出的原則##返回時,先返回本任務棧的Activity2)、在Java中,Intent跳轉時,僅限於本次頁面跳轉與方法1的區別:在清單檔案中可以設定4種,而java程式碼中只能3種清單檔案一旦設定,啟動模式固定了,而java中可以根據不同的跳轉設不同的啟動模式兩者衝突,以Java中的啟動模式為準intent.setFalgs():FLAG_ACTIVITY_SINGLE_TOP =singleTopFLAG_ACTIVITY_SINGLE_TOP|FLAG_ACTIVITY_CLEAR_TOP =singleTask不新增 =standard3、Intent頁面跳轉顯式意圖:需要用到Intent的一個屬性 ComponentName(元件名)ComponentName是Intent的七大屬性之一,用來元件間跳轉,形成顯式意圖,可以進行跨程式挑轉頁面底層都是封裝的ComponentName1:Intent intent = new Intent((當前元件.this,目標元件.class);2:Intent intent = new Intent();intent.setClass(當前元件.this, 目標元件.class);3:Intent intent = new Intent(); ComponentName componentName = new ComponentName(當前元件.this,目標元件.class); intent.setComponent(componentName);4:跳轉到其他應用Intent intent = new Intent();/** * 引數1 目標程式包名 * 引數2 目標activity的全路徑(包名+類名) * 要跳轉的程式必須安裝在手機上了,不必須是開啟狀態 */ ComponentName componentName = new ComponentName("com.zjf.activity","com.zjf.activity.MainActivity"); intent.setComponent(componentName); startActivity(intent);隱式意圖:利用動作表示你要做的事給定目標的引數,根據引數去匹配具體的元件如果清單檔案中的activity沒有<intent-filter>的存在,那麼要開啟此activity,只能顯式 意圖。如果有,可以使用隱式意圖。隱式意圖匹配的過程,就是Intent與清單檔案<intent-filter>進行匹配的過程。發出的Intent匹配的是所有有<intent-filter>的元件。隱式意圖匹配成功:是intent中包含的Action和Category還有Data,type和intent-filter中包含的Action和Category還有Data,type完全相符,即匹配成功。intent-filter中包含的Action和Category還有Data type在目標activity的清單檔案中設定 action,category(附加條件 但必須加預設)Action:一個Intent setAction,只能攜帶一個Action(java中set多數是=賦值,多次設定,只能保留最後一次的內容)一個intent-filter可以有多個action,只有intent的action在intent-filter中包含,就能匹配成功Category:addCategory(在java中,add是新增,一般內部都是一個集合,呼叫此方法,會把資料新增到集合中),所以可以攜帶多個Category。Intent中可以包含多個Category,如果Intent中的category都被清單檔案的intent-filter包含,就算匹配成功。為什麼加預設的?Intent中會自動攜帶一個category,如果想要intent-filter匹配成功,必須要在intent-filter中攜帶預設的categoryData:scheme:協議Uri.parse("http://www.123321.com") 把字串改成UriIntent中setData(URI); Intent中攜帶的資料中的協議與intent-filter中的data中的scheme相同即可mimeType:!!!data和type同時使用時,intent需要使用setDataAndType(); 單獨使用,會使另一個為空(看原始碼)位於在Data中Intent設定setType()一個intent中只能有一個type,如果多次設定,以最後一次為準Intent中的型別只要在intent-filter中存在就可以匹配成功#在清單檔案中有多個意圖過濾器,匹配原則為完全全部匹配一個即可4、Intent的七大屬性:ComponentName: 元件間跳轉,顯示意圖底層封裝Extra: 攜帶的資料intent.putExtra(key,vaule);Flags: java程式碼設定啟動模式(三種)隱式意圖的一部分:在於intent-filter匹配的過程中,這四種都是需要考慮的因素Action Category Data Type5、利用隱式意圖開啟系統相關的Activitya:打電話intent.setAction(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:13525425260"));許可權