第一行代碼筆記 Activity

Activity(活動)是一種可以包含用戶界面的組件,主要用於與用戶進行交互,一個應用程序可以包含一個或多個活動
創建活動是,勾選Generate Layout File表示會自動爲FirstActivity創建一個對應的佈局文件,勾選Launcher表示將創建的活動設置爲當前項目的主活動,勾選Backwards Compatibility表示會爲項目表示啓用鄉下兼容模式
修改虛擬機的路徑:新建一個環境變量,比如名爲ANDROID_SDK_HOME (不可修改爲其他)設置環境變量:ANDROID_SDK_HOME = D:\Android_Emulator(它會自動創建一個.android文件夾,新建的avd就在裏面)


在xml文件中引用一個id,用@id/id_name,在xml文件中定義一個id則用@+id/id_name
android:layout_width:指定了當前元素的寬度,值爲match_parent表示與父元素一樣寬
android:layout_height:指定當前元素的高度,wrap_content表示高度根據裏面的內容而定
android:text:指定當前元素顯示的文字內容


Activity中調用setContentView方法給當前活動加載佈局


在AndroidMenifest.xml文件中註冊活動:在application標籤中,通過activity標籤進行註冊,activity標籤中的屬性如下:
android:name  指定活動的名稱
android:label  指定活動標題欄中的內容

Toast是Android系統提供的一種非常好的提醒方式,在程序中可以使用它將一些短小的信息通知發送給用戶,這些信息會在一段時間後自動消失,不會佔用任何屏幕空間


在程序中,可以通過findViewByID()獲取ID對應的佈局文件中定義的元素,返回的是一個View對象
調用setOnClickListener爲按鈕註冊一個監聽器,View.OnClickListener監聽器監聽元素點擊事件


Toast用法:調用makeText(Context context,String content,int time)創建一個Toast對象,content爲顯示的內容,time爲顯示的時長,Toast內部有兩個常量,Toast.LENGTH_SHORT和Toast.LENGTH_LONG,調用show()顯示出來


創建按鈕Button:
1、在佈局文件中創建Button標籤
2、在Activity中獲取該按鈕對象,並監聽點擊事件
Button button1 = (Button)findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"this is toast",Toast.LENGTH_SHORT).show();
}
});


創建菜單:
1、<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item //菜單項
android:id="@+id/add_item"   //菜單項的標識符
android:title="add" />       //菜單項顯示的內容
<item
android:id="@+id/remove_item"
android:title="remove"/>
</menu>
2、在Activity中重寫onCreateOptionMenu()方法
@Override
    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.main,menu);//爲當前活動創建菜單
        return true;//表示該菜單會顯示出來
}
3、在Activity中重寫onOptionsItemSelected()方法來定義菜單響應事件

調用finish()方法可銷燬當前活動


Intent是Android程序中各個組件進行交互的一種重要的方式,一般可用於啓動活動,啓動服務以及發送廣播等場景,Intent大致可分爲兩種,顯式Intent和隱式Intent,Activity中提供一個方法startActivity()專門用於啓動活動
顯式Intent:
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
//SecondActivity.class爲活動目標,MainActivity.this爲上下文
隱式Intent:使用action創建Intent,每個Intent只能創建一個action,但可以有多個category
Intent intent = new Intent("com.example.testapplication.ACTION_START");
intent.addCategory("com.example.testapplication.MY_CATEGORY");
startActivity(intent);

在應用程序中實現打開一個網頁:
    Intent intent = new Intent("Intent.VIEW");
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
//setData()方法接收Uri對象,主要用於指定當前Intent正在操作的數據
同時要在<intent-filter>標籤中配置一個data標籤
android:scheme  用於指定數據的協議部分,如上面的http部分
android:host    指定數據的主機名部分,如www.baidu.com部分
android:port    指定數據的端口部分,一般緊隨在主機名之後
android:path    指定主機名和端口之後的部分,如一段網址跟在域名之後的內容
android:mimeType用於指定可以處理的數據類型,允許使用通配符的方式進行指定
android.intent.category.DEFAULT是一種默認的category,在調用startActivity()方法的時候會自動將這個category加到intent中

使用intent調用系統中的撥號:
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:l0086"));
startActivity(intent);


使用intent傳遞數據,Intent中提供了一系列putExtra()方法的重載,可以將想要傳遞的數據暫存在Intent中,啓動另一個活動後再將這些數據從Intent中取出來,使用getStringExtra()方法取出這些數據


Activity中startActivityForResult():該方法期望在活動銷燬時返回一個結果給上一個活動,該方法接收兩個參數,第一個是Intent,第二個參數是請求碼,用於在之後的回調中判斷數據的來源
setResult()用於向上一個活動返回數據接收兩個參數,一個參數用於向上一個活動返回處理結果,一般只使用RESULT_OK或RESULT_CANCELED,第二個參數則把帶有數據的Intent傳遞回去
調用startActivityForResult()方法來啓動下一個Activity,在Activity銷燬之後會回調到上一個活動的onActivityResult()方法,因此我們要在前一個Activity中重寫該方法onActivityResult()有三個參數,低於個是requestCode,請求活動時傳入的請求碼,第二個參數是resultCode,即我們在返回數據時傳入的處理結果,第三個參數是data,即攜帶着返回數據的Intent
用戶按下BACk鍵時,會調用當前Activity中的onBackPressed()方法


每個活動在其生命週期中最多可能會有四種狀態:
1、運行狀態。2、暫停狀態。3、停止狀態。4、銷燬狀態

Activity類中定義了7個回調方法,覆蓋了生命週期的每一個環節:
1、onCreate():會在活動第一次創建時調用
2、onStart():當活動由不可見變爲可見的時候調用
3、onResume():在Activity準備好和用戶進行交互的時候調用,此時的活動一定位於返回棧的棧頂,並且處於運行狀態
4、onPause():在系統準備去啓動或者恢復另一個活動的時候調用,通常在該方法中將一些消耗CPU的資源釋放掉,保存一些關鍵數據
5、onStop():在活動完全不可見的時候調用,如果啓動的新活動是一個對話框式的活動,那麼onPause()會執行,而onStop不會被執行
6、onDestory():這個方法在活動銷燬之前調用
7、onRestart():這個方法由停止狀態變爲運行狀態之前調用

可將活動分爲三種生存期:
1、完整生存期:活動在onCreate()和onDestory()經歷的,爲完整生存期
2、可見生存期:活動在onStart()和onStop()之間經歷的,爲可見生存期
3、前臺生存期:活動在onResume()和onPause()之間經歷的就是前臺生存期


Android重命名文件:選定要重命名的文件->Refactor->Rename file


Activity中提供了一個onSaveInstanceState()回調方法,這個方法可以保證在活動被回收前一定會被調用,我們可以通過這個方法來解決活動被回收是臨時數據得不到保存的問題,onSaveInstanceState()方法會攜帶一個Bundle類型的參數,Bundle提供一系列的方法用於保存數據,比如可以使用 putString()方法保存字符串,每個保存方法需要傳入兩個參數,第一個參數是鍵,用於後面從Bundle獲取內容,第二個參數是真正保存的內容,Intent可以跟Bundle結合一起傳遞數據


在實際項目中我們應該根據特定的需求爲每個活動指定恰當的啓動模式,啓動模式一共四種,分別是standard,singleTop,singleTask,和singleInstance,可以在AndroidMenifest.xmlzhong通過給<Activity>標籤指定android:launchMode屬性來選擇啓動模式
1、standard:是活動默認是啓動模式,在不顯式指定的情況下,所有活動都會自動使用這種啓動模式,在該模式下每當啓動一個新的活動,它就會在返回棧中入棧,並處於棧頂的位置,系統不會在乎這個活動是否在返回棧中存在,每次啓動都會創建該活動的一個新的實例
2、singleTop:該模式下,如果發現返回棧的棧頂已經是該活動,則認爲可以直接使用它,,不會在創建新的活動實例(android:launchMode="singleTop")
3、singleTask:該模式下,每次啓動該活動時首先會在返回棧中檢查是否存在該活動的實例,如果發現已存在則直接使用該實例,並把這個活動之上的活動統統出棧
4、singleInstance:該模式下的活動會啓動一個新的返回棧來管理這個活動,解決了共享活動實例的問題


殺掉進程的代碼:android.os.Process.killProcess(android.os.Process.myPid()),但是隻用於殺掉當前進程













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章