Android學習筆記(1)
Android系統四大元件:
活動(Activity):用於顯示各種內容的一個介面
服務(Service):用於後臺執行任務
廣播接收器(Broadcast Receiver):規定應用程式所能接收的廣播和向外傳送廣播
內容提供器(Content Provider):用於應用程式間共享資料
四大元件需要在AndroidManifest.xml裡註冊,如Acitivity的註冊
<activity android:name=".XXXActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /><--專案的主活動-->
<catepory android:name="android.intent.category.LANCHER" /><--程式啟動後進入的活動-->
</intent-filter>
</activity>
Android的設計是邏輯和檢視分離,即Activity中不直接寫介面,而是在佈局檔案中,然後在活動中引入佈局檔案(setContentView(R.layout.xxx))
一般一個活動對應一個佈局檔案,建立新活動時會自動建立對應的佈局檔案,也會重寫onCreate方法。
獲取佈局檔案中的各種控制元件例項,findViewById(R.id.xxx),如
Button button = (Button) findViewById(R.id.button)
在活動中使用Menu
res目錄下新建menu資料夾,再新建menu檔案,如main.xml,包括2個選單項
<menu xmlns:android:="http://scemas.android.com/apk/res/android">
<item
android:id="@+id/add_item"
android:title="Add" />
<item
android:id="@+id/remove_item"
android:title="Remove" />
</menu>
在活動中重寫onCreateOptionsMenu方法
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.main, menu);//先得到MenuInflater物件,再呼叫inflate方法給當前活動通過選單資原始檔建立指定選單
return true;//true 允許建立的選單顯示; false不允許顯示
}
給各選單項新增功能,如點選後彈出訊息,需要定義選單響應事件
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId() {
case R.id.add_item:
Toast.make(this, "Click Add MenuItem", Toast.LENGTH_SHORT).show();
break;
......
}
return true;
}
活動可以通過finish方法銷燬
活動之間的跳轉:Intent
Intent可以在不同活動中跳轉,還可以攜帶資料。Intent可用於啟動活動,啟動服務,傳送廣播等
顯示Intent:Intent (Context packageContext, Class<?> cls) 啟動活動的context和目標活動的Class物件
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
隱式Intent:Intent ("com.example.activitytest.ACTION_START") 啟動某個活動,且標籤指定的就是 Intent中的action引數
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
在FirstActivity中新增如下程式碼,啟動SecondActivity
Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);
當category不是預設的時候,需要給 intent也指定與SecondActivity中的category相同的category
<category android:name="com.example.activitytest.MY_CATEGORY" />
自定義的category。即只有action和category同時匹配的時候,那個活動才能響應intent
Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
隱式Intent不僅可以啟動程式內部的活動,還可以啟動其它程式的活動,如啟動系統瀏覽器
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
撥號介面
Intent intent = new Intent(Intetnt.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
aciont是Inent.ACTION_VIEW和Inent.ACTION_DIAL,系統內建的動作,再將一個字串解析為Uri物件,並傳遞給intent。 當一個活動配置了標籤,在intent.setData時也必須有指定的引數. 向下一個活動傳遞資料 給Intent物件傳遞簡單型別資料,如String、Boolean、Int等,呼叫Intent物件的putExtra方法,如下程式碼示例
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("string_data","accfcx");
startActivity(intent);
在另一個活動中取出資料
Intent intent = getIntent();
String data = intent.getStringExtra("string_data");
將資料傳給傳給上一個活動 FirstActivity中,新增程式碼如下,其中1是請求碼
ntent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent,1);
SecondActivity中,建立一個Intent物件,攜帶資料,然後會在FirstAcitivity中獲得,程式碼如下
Intent intent = new Intent();
intent.putExtra("data_return","來自SecondActivity的資料");
setResult(RESULT_OK, intent);
finish();
SecondActivity銷燬後(如點選了按鈕或者按下Back鍵),會回撥FirstActivity中的onActivityResult方法,重寫此方法。當按下Back鍵,需要重寫SecondActivity的onBackPressed方法並新增如下程式碼
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK){
String returnData = data.getStringExtra("data_return");
}
break;
default:
}
}
請求碼是用來區別啟動的不同活動,當此方法被呼叫時,檢查請求碼是來自哪一個活動,即每啟動一個活動都分配一個唯一的請求碼
活動的生命週期
onCreate:活動第一次被建立的時候呼叫
onStart:在活動由不可見到可見的時候呼叫
onResume:在恢復或者啟動一個活動時呼叫
onPause:啟動或者恢復另一個活動時呼叫,如啟動了一個對話方塊
onStop:活動完全不可見時呼叫,如啟動了一個新活動
onDestroy:活動銷燬前呼叫
onRestart:活動由停止狀態變為執行狀態前呼叫
當前活動C分別啟動了2個活動,一個普通的活動N,另一個是對話方塊活動D。
程式啟動後,依次呼叫 onCreate、onStart、onResume
此時啟動普通活動N,C呼叫onPause和onStop方法,再回到C時,又會呼叫onRestart、onStart、onResume方法
再啟動對話方塊活動D,C呼叫onPause方法,回到C時,呼叫onResume方法
退出C時,呼叫onPause、onStop、onDestroy方法
活動被回收時,會呼叫onSaveInstanceState方法,可以用來儲存臨時資料,在onCreate中取出儲存的資料
活動的啟動模式
活動有4種啟動模式,standard、singleTop、singleTask和singleInstance
standard:每啟動一個活動,都會在返回棧中入棧,不管是否已經存在
singleTop:當已經處於棧頂時,再啟動相同活動,都不會入棧
singleTask:保證整個棧只存在唯一一個活動例項,即使不在棧頂,則把此活動之上的所有活動出棧
singleInstance:啟用新的返回棧管理活動,可以實現和其它程式共享此活動
使用一個BaseActivity和ActivityCollector實現對所有的活動進行管理
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();
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();
}
}
}
在每一個新建立的活動都繼承BaseActivity類,會自動新增到ActivityCollector中,也能夠呼叫它的的finishAll方法銷燬所有活動
一個啟動活動的技巧,在第一個活動中呼叫要啟動的活動的靜態方法,把資料傳遞進去。方法內部會建立intent物件並啟動活動
相關文章
- 2018.03.30、Android-ObjectBox學習筆記1AndroidObject筆記
- Android 學習筆記雜記Android筆記
- Android學習筆記·ANRAndroid筆記
- Android學習筆記·HandlerAndroid筆記
- Android學習筆記·ADBAndroid筆記
- Android學習筆記一Android筆記
- Android SQLite學習筆記AndroidSQLite筆記
- Android Linker學習筆記Android筆記
- Android Studio學習筆記Android筆記
- 學習筆記1筆記
- 學習筆記-1筆記
- Android 學習筆記核心篇Android筆記
- Android Gradle 學習筆記整理AndroidGradle筆記
- Android 學習筆記思考篇Android筆記
- 2018.03.06 Android Handler學習筆記Android筆記
- Android 開發學習筆記Android筆記
- python學習筆記(1Python筆記
- Vue學習筆記1Vue筆記
- swift學習筆記《1》Swift筆記
- HTML學習筆記1HTML筆記
- ADworld學習筆記(1)筆記
- flex:1學習筆記Flex筆記
- git學習筆記 1Git筆記
- git學習筆記1Git筆記
- SLAM學習筆記(1)SLAM筆記
- golang 學習筆記1Golang筆記
- HTML學習筆記(1)HTML筆記
- hibernate學習筆記(1)筆記
- spring學習筆記(1)Spring筆記
- Leetcode學習筆記(1)LeetCode筆記
- Numpy學習筆記 1筆記
- Android 學習筆記架構篇Android筆記架構
- React Native Android學習筆記 - 2015React NativeAndroid筆記
- 2018.03.16、Android-IntentService學習筆記AndroidIntent筆記
- Android環境搭建學習筆記Android筆記
- React學習筆記1—起步React筆記
- webpack1學習筆記Web筆記
- Scrapy 框架 (學習筆記-1)框架筆記
- Spring框架學習筆記(1)Spring框架筆記