標籤:
1、android的四大組件的了大概功能
activity:負責顯示介面,和使用者互動。
service:運行在後台。
content provider:為程式app之間的資料訪問提供介面。
broadcast:廣播
2、組件的啟用
activity、service、broadcast都是通過intent激動的。
啟動activity:
你可以啟動一個activity(或者讓讓它來做一些新的工作)通過傳遞一個Intent給startActivity() 或者 startActivityForResult() (當你想讓一個activity為你返回一個結果)。 Intent intent = new Intent(XskpActivity.this, XsSpmlActivity.class); startActivityForResult(intent, REQUEST_CXSPML);//從loginActivity介面跳到homeActivity介面 Intent intent = new Intent(); intent.setClass(LoginActivity.this, HomeActivity.class); // 描述起點和目標 startActivity(intent);
View Code
啟動service:
用startService或是bindService
啟動broadcast
用sendBroadcast,sendOrderedBroadcast,或是sendStickyBroadcast
3、設定檔AndroidManifest.xml
所有的組件:activity,service,broadcast,contentprovider必須在這個檔案裡面聲明。
聲明程式要獲得的許可權
聲明程式正常啟動並執行配置要求:包括api的要求,配置組件要求
4、activity的使用 4.1、建立activity
1)通過建立activity的子類來建立,在類裡面的onCreate()方法裡通過調用setContentView()並轉入布局檔案xml的id來設定程式activity的UI。
2)activity的布局用xml檔案來實現,也可以在代碼裡自己寫布局
3)在androidManifest.xml檔案裡配置activity,不聲明就訪問不了
<manifest ... > <application ... > <activity android:name=".ExampleActivity" /> ... </application ... > ...</manifest >
View Code
4.2、啟動activity
1)簡單啟動自己程式裡另一個activity
Intent intent = new Intent(this, SignInActivity.class);startActivity(intent);
View Code
在intent裡寫明要啟動的activity名字就可以了
2)啟動其它程式的activity
Intent intent = new Intent(Intent.ACTION_SEND);intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);startActivity(intent);
View Code
在intent裡描述要啟動的activity的條件,滿足這些條件的程式會自動啟動,如果程式不止一個,系統會讓使用者選擇運行哪個程式。
4.3、啟動一個帶返回結果的activity
1)只要用startActivityForResult()方法代碼startActivity()就行
2)在本activity裡實現onActivityResult()回調方法來擷取返回的結果。
private void pickContact() { // Create an intent to "pick" a contact, as defined by the content provider URI Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT_REQUEST);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { // If the request went well (OK) and the request was PICK_CONTACT_REQUEST if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { // Perform a query to the contact‘s content provider for the contact‘s name Cursor cursor = getContentResolver().query(data.getData(), new String[] {Contacts.DISPLAY_NAME}, null, null, null); if (cursor.moveToFirst()) { // True if the cursor is not empty int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME); String name = cursor.getString(columnIndex); // Do something with the selected contact‘s name... } }}View Code
4.4、關閉activity
用finish()或finishActivity(),但一般要關閉activity,關閉後使用者就不能返回到這個activity了,一般都是交能系統去關閉,手動關閉後影響了使用者的體驗。
4.5、管理activity的生命週期
1)生命週期有:
resumed:activity在前台,有焦點
paused:activity被其它的activity擋住了,沒有了焦點,但本身還是可見的。
stop:activity完全被其它的activity覆蓋
2)實現生命週期回調方法
public class ExampleActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // The activity is being created. } @Override protected void onStart() { super.onStart(); // The activity is about to become visible. } @Override protected void onResume() { super.onResume(); // The activity has become visible (it is now "resumed"). } @Override protected void onPause() { super.onPause(); // Another activity is taking focus (this activity is about to be "paused"). } @Override protected void onStop() { super.onStop(); // The activity is no longer visible (it is now "stopped") } @Override protected void onDestroy() { super.onDestroy(); // The activity is about to be destroyed. }}View Code
一般要在onCreate方法裡實現activity布局和建立資源,在onDestroy()方法裡進行資源的釋放。
3)生命週期圖和表
| 方法 |
描述 |
之後可否被殺死? |
下一個方法 |
| onCreate() |
activity第一次被建立時調用。在這裡你應該完成所有常見的靜態設定工作——建立view、綁定list資料等等。 本方法傳入一個包含了該activity前一個狀態的Bundle對象(如果之前已捕獲了狀態的話,詳見後面的儲存Activity狀態)。 下一個回調方法總是onStart()。 |
否 |
onStart() |
| onRestart() |
activity被停止後、又再次被啟動之前調用。 下一個回調方法總是onStart() |
否 |
onStart() |
| onStart() |
activity要顯示給使用者之前調用。 如果activity進入前台,則下一個回調方法是onResume();如果進入隱藏狀態,則下一個回調方法是onStop()。 |
否 |
onResume() 或 onStop() |
| onResume() |
activity開始與使用者互動之前調用。這時activity是在activity棧的頂端,使用者可以向其中輸入。 下一個回調方法總是onPause()。 |
否 |
onPause() |
| onPause() |
當系統準備啟動另一個正在恢複的activity時調用。這個方法通常用於把未儲存的改動提交為永久資料、停止動畫播放、以及其它可能消耗CPU的工作等等。 它應該非常迅速地完成工作,因為下一個activity在本方法返回前是不會被恢複啟動並執行。 如果activity返回前台,則下一個回調方法是onResume();如果進入使用者不可見狀態,則下一個是onStop() |
可以 |
onResume() 或 onStop() |
| onStop() |
當activity不再對使用者可見時調用。原因可能是它即將被銷毀、或者其它activity(已有或建立的)被恢複運行並要覆蓋本activity。 如果activity還會回來與使用者互動,則下一個回調方法是onRestart();如果這個activity即將消失,則下一個回調方法是onDestroy() |
可以 |
onRestart() 或 onDestroy() |
| onDestroy() |
在本activity被銷毀前調用。這是activity收到的最後一個調用。 可能是因為activity完成了工作(有些人在這裡調用finish()), 也可能是因為系統為了騰出空間而臨時銷毀activity的本執行個體。 可以利用isFinishing() 方法來區分這兩種情況。 |
可以 |
無 |
4.6、儲存activity狀態(待學) 4.7、多activity的合作(待學) 5、fragments(待學)6、stacks和back stack(待學)
android學習筆記