標籤:create 標題 完全 cte button png col 對象 gac
Android_activity 生命週期
activity是Android四大組件之一,每一個activity都有自己的生命週期,就像每一個人一樣會經曆
出生-----學會行走,交流------健康------生病------痊癒------健康-------死亡
對於activity的理解,Android官網提供了這樣一張圖:
onCreate:activity第一次建立
onStart:使用者可以看見activity,但還不能點擊操作
onResume:擷取焦點,可以進行點擊操作
Activity is Running:activity正常運行
onPause:被暫停
onStop:停止運行
onDestroy:被銷毀
onRestart:重新運行
流程說明:onPause→onResume activity沒有完全被另一個activity覆蓋,重新擷取焦點,恢複可操作狀態
onStop→onRestart→onStar :第一個activity完全被第二個activity覆蓋時,再次返回第一個activity,由不可見轉為可見
onStop→onCreate 進程被殺死時執行流程
activity生命週期:就像走樓梯一樣是一階一階的
activity之間資料的傳遞:
現在有activityA和activityB兩個activity介面
A為主介面,B介面需經過A介面跳轉
當由A介面跳轉B介面時:A如何向B傳遞資料,以及B介面如何接受A介面傳遞過來的資料
主要使用Intent類進行傳遞,如下代碼,有詳細註解
A介面Java代碼
public class MainActivity extends AppCompatActivity { private TextView textView,textView1; public static final String TEXTVIEW_2 = "textview2"; private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG, "onCreate: "); final Book book = new Book("西遊記","吳承恩"); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, Second_activity.class); //1.直接使用intent傳輸資料// intent.putExtra(TEXTVIEW_2,"我是第二個activity"); //2.使用bundle傳輸資料 /*Bundle bundle = new Bundle(); bundle.putString(TEXTVIEW_2,"我是使用bundle建立的第二個activity"); intent.putExtra(BUNDLE,bundle);*/ //3.傳遞Serializable對象 intent.putExtra("name",book); //參數2:發送的請求 int 類型 startActivityForResult(intent,999); } }); findViewById(R.id.button6).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this,Dialog.class); startActivityForResult(intent,0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { textView = findViewById(R.id.textView2); super.onActivityResult(requestCode, resultCode, data); if((requestCode == 999) && (resultCode == 12)){ if (data != null){ textView.setText(data.getSerializableExtra("textView1").toString()); } }}
B介面Java代碼:
public class Second_activity extends AppCompatActivity { public static final String TEXTVIEW_1 = "textview1"; TextView textView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); textView = findViewById(R.id.textView); //接收使用intent傳遞的資料 if(getIntent() != null){//判斷是否為空白,容易出現null 指標異常 textView.setText(getIntent().getSerializableExtra("name").toString()); } //接收使用bundle傳遞的資料 /* if(getIntent() != null){ Bundle bundle = getIntent().getBundleExtra(MainActivity.BUNDLE); if (bundle != null){ textView.setText(bundle.getString(MainActivity.TEXTVIEW_2)); } }*/ findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(); intent.putExtra("textView1",new Book("水滸傳","施耐庵")); //參數1:請求回應 setResult(12,intent); finish(); } }); } //重寫返回鍵 @Override public void onBackPressed() {// super.onBackPressed();//會自動調用finish方法,需要注釋掉 Intent intent = new Intent(); intent.putExtra("textView1",new Book("水滸傳","施耐庵")); //參數1:請求回應 int 類型 setResult(12,intent); finish(); }}
Dialogactivity:
1.建立Dialogactivity繼承Activity類
2.在manifeste中修改DialogActivity的主題風格,標題
<activity android:name=".Dialog" android:label="請輸入手機號碼" android:theme="@style/Theme.AppCompat.Dialog" >
3.主activity啟動DialogActiv,並發送資料傳遞請求
findViewById(R.id.button6).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this,Dialog.class); startActivityForResult(intent,0); } });
4.DialogActivity傳回資料
public class Dialog extends AppCompatActivity { private EditText editText; private static final String TAG = "Dialog"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog); editText = findViewById(R.id.editText); findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Dialog.this,MainActivity.class); intent.putExtra("name",editText.getText().toString()); Dialog.this.setResult(RESULT_OK,intent); Dialog.this.finish(); } }); }}
5.主activity接收資料onActivityResult方法中
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { textView1 = findViewById(R.id.textView3); if((requestCode == 0) && (resultCode == RESULT_OK)){ if (data != null){ textView1.setText(data.getStringExtra("name")); } } }
activity的每一個生命週期都有它存在的意義,在什麼階段要進行什麼操作,只需在它對應的生命週期方法中執行相應的代碼即可~
Android_activity 生命週期