一、活动生命周期
二、生命周期执行介绍
当该页面(Activity)被启动时
会执行onCreate()、onStart()、onRestart()这三个方法,
只有当onRestart() 方法执行完后才会处于一个运行状态(Activity running)
如果另外一个activity 跑到当前正在执行的activity前面了,我们当前的activity就会执行onPause()方法,比如来电话了长按Home键的情况。
如果从onPause()方法返回到activity页面的时候,会执行一次onResume(),再回到activity。
如果页面从活动状态,变为不可见状态时,也就是停止状态时候,
会执行onPause()方法后再执行onStop()方法。
如果从onStop()方法处返回到页面时,
会执行一个onRestart()方法后执行onStart()方法接着再执行onResume()方法后回到页面。
注意:如果处于onStop()或者onPause()方法时候,页面由于手机内存低、或者被其他软件杀掉的时候,
再返回页面时候,会从onCreate()方法开始执行,接着onRestart()、onStart()、onResume()
onDestroy()方法,被系统关闭的时候或者手动的时候才会执行,执行完这个方法后,我们的activity就被彻底关闭了。
三、Activity方法定义
活动的整个生命周期由以下Activity方法定义。
public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); }
四、Activity样式修改
通过添加activity中theme参数可以修改界面的样式,
如下两个图,可以看出添加theme样式后菜单栏改没了,当然样式可以选择其他的,会有不同效果。
五、Activity的创建与切换
1.首先新建一个activity页面,
用的Android studio,建的比较快,
如果用eclipse的话需要先创建一个类,并且扩展至Activity,
然后在AndroidManifest.XML中配置添加页面,
<activity android:name=".Main2Activity"></activity>
还要在layout中新建一个内容布局,并且在创建的类中的onCreate方法中绑定它。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); }
这里我直接通过Android studio创建,省略以上步骤。
2.在activity1视图中创建一个标签和一个按钮
注意ID的写法,自定义ID得加上@+/
接着回到视图A类,
编写以下代码
执行效果如下,点击后跳转到第二个页面
六、如何关闭掉一个activity
设计如下,在第二个页面中拖入一个按钮,把当前activity关闭掉
private Button btnButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); btnButton =findViewById(R.id.btnClose); btnButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); }
点击关闭后回到页面一
七、activity数据的传送
设计思路:在页面二中创建一个标签,用来接收来自页面一的数据,
然后通过按钮“启动第二个页面”把数据带到页面二。
1.通过putExtra方法和getStringExtra方法实现简单的数据传送。
2.通过Bundle传送复杂类型数据
执行效果也是一样 的。
八、activity关闭后数据的回调
当页面二activity关闭的时候,从页面二把数据传回,然后从页面一获得数据并显示到页面一。
在页面一想得到一面二传回来的数据,这里就不能用startActivity方法,
要改用startActivityForResult函数。
并且重载onActivityResult方法,下图中通过data.getStringExtra得到视图二返回的参数
下图为视图二,这里在finish之前使用setResult将参数传回
测试如下,先进入视图一,下图中TextView 是默认值,当前没有收到返回值
接着点击启动第二个页面
然后点击关闭,这里可以看到已经得到了从页面二返回的数据
九、用到的部分源码
package com.ali.application.mytest; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import org.w3c.dom.Text; public class MainActivity extends AppCompatActivity { private Button S2;//定义一个按钮 private TextView tRe;//定义一个标签 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); S2=findViewById(R.id.S2);//通过findViewById查找视图中按钮 tRe=findViewById(R.id.tRe); S2.setOnClickListener(new View.OnClickListener() {//设置一个事件监听器 @Override public void onClick(View view) { //启动页面2 Intent i = new Intent(MainActivity.this,Main2Activity.class); //i.putExtra("val","mytest"); Bundle data=new Bundle(); data.putString("val","myTest"); i.putExtras(data); // startActivity(i);//要取得返回值的话不能用这个函数 startActivityForResult(i,0);//这里的0对应onActivityResult方法中的requestCode } }); System.out.println("Create"); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { String re=data.getStringExtra("val"); tRe.setText(re); super.onActivityResult(requestCode, resultCode, data); } @Override protected void onStart() { super.onStart(); System.out.println("start"); } @Override protected void onResume() { super.onResume(); System.out.println("resume"); } @Override protected void onPause() { super.onPause(); System.out.println("pause"); } @Override protected void onStop() { super.onStop(); System.out.println("stop"); } @Override protected void onDestroy() { super.onDestroy(); System.out.println("destroy"); } @Override protected void onRestart() { super.onRestart(); System.out.println("restart"); } }
package com.ali.application.mytest; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class Main2Activity extends AppCompatActivity { private Button btnButton; private TextView tOut;//定义一个标签 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); btnButton =findViewById(R.id.btnClose); btnButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent i = new Intent(); i.putExtra("val","testResult"); setResult(0,i); finish(); } }); tOut = findViewById(R.id.tOut); //tOut.setText(getIntent().getStringExtra("val")); Bundle data=getIntent().getExtras(); tOut.setText(data.getString("val")); } }