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){//判断是否为空,容易出现空指针异常 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的每一个生命周期都有它存在的意义,在什么阶段要进行什么操作,只需在它对应的生命周期方法中执行相应的代码即可~