介绍Activity
Activity是Android 四大组件最常见的组件 其他三个组件分别是Service、ContentProvider、BrocastReciver 。
activity位于充满整个窗口或者是覆盖在其他窗口之上 , 当启动另一个activity 以存在的activity就会被新的activity覆盖 大家都知道栈的原理 先进后出的规矩 ,以存在的activity就会压入到栈中 等待被启动 。
activity是一个应用组件、提供一个屏幕 用户可以与之交互执行做某一件事。
Activity生命周期
生命周期的图:
从上面图可知道activity创建直到结束的这么个过程和它中间发生了什么状态的变化.
下面来创建一个项目 更加的清楚 明白activity生命周期的运行状态
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
public class ActivityLife extends Activity {
private final static String TAG="ActivityLife";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "onCreate");
}
@Override
protected void onStart() {
Log.i(TAG, "onStart");
super.onStart();
}
@Override
protected void onRestart() {
Log.i(TAG, "onRestart");
super.onRestart();
}
@Override
protected void onResume() {
Log.i(TAG, "onResume");
super.onResume();
}
@Override
protected void onPause() {
Log.i(TAG, "onPause");
super.onPause();
}
@Override
protected void onStop() {
Log.i(TAG, "onStop");
super.onStop();
}
@Override
protected void onDestroy() {
Log.i(TAG, "onDestroy");
super.onDestroy();
}
}
上面是一个较简单的一个activity ,目的是了解activity生命周期的过程。
当启动一个activity时 会执行哪些方法:
Log.i(TAG, "onCreate");
Log.i(TAG, "onStart");
Log.i(TAG, "onResume");
当长按“home”键 看看最近的应用程序 启动ActivityLife 会执行哪些方法:
Log.i(TAG, "onCreate");
Log.i(TAG, "onStart");
Log.i(TAG, "onResume");
当按"home"键 会执行哪些方法:
Log.i(TAG, "onPause");
Log.i(TAG, "onStop");
当 按 “返回“键 会执行哪些方法:
Log.i(TAG, "onPause");
Log.i(TAG, "onStop");
Log.i(TAG, "onDestroy");
当关闭应用程序 会执行哪些方法:
Log.i(TAG, "onRestart");
Log.i(TAG, "onStart");
Log.i(TAG, "onResume");
以下是各个方法的详细说明:
onCreate():当 activity 第一次创建时会被调用。在这个方法中你需要完成所有的正常静态设置 ,比如创建一个视图( view )、绑定列表的数据等等。如果能捕获到 activity 状态的话,这个方法传递进来的 Bundle 对象将存放了 activity 当前的状态。调用该方法后一般会调用 onStart() 方法。
onRestart():在 activity 被停止后重新启动时会调用该方法。其后续会调用 onStart 方法。
onStart()à当 activity 对于用户可见前即调用这个方法。如果 activity回到前台则接着调用 onResume() ,如果 activity 隐藏则调用onStop()
onResume():在 activity 开始与用户交互前调用该方法。在这时该activity 处于 activity 栈的顶部,并且接受用户的输入。其后续会调用 onPause() 方法。
onPause():在系统准备开始恢复其它 activity 时会调用该方法。这个方法中通常用来提交一些还没保存的更改到持久数据 中,停止一些动画或其它一些耗 CPU 的操作等等。无论在该方法里面进行任何操作,都需要较快速完成,因为如果它不返回的话,下一个 activity 将无法恢复出来。如果 activity 返回到前台将会调用 onResume() ,如果 activity 变得对用户不可见了将会调用onStop() 。
onStop():在 activity 对用户不可见时将调用该方法。可能会因为当前 activity 正在被销毁,或另一个 activity (已经存在的activity 或新的 activity )已经恢复了正准备覆盖它,而调用该方法。如果 activity 正准备返回与用户交互时后续会调用onRestart ,如果 activity 正在被释放则会调用 onDestroy 。
onDestroy():在 activity 被销毁前会调用该方法。这是 activity 能接收到的最后一个调用。可能会因为有人调用了 finish 方法使得当前activity 正在关闭,或系统为了保护内存临时释放这个 activity的实例,而调用该方法。你可以用 isFinishing 方法来区分这两种不同的情况。
以上方法解释 感谢http://blog.csdn.net/tangcheng_ok 博主
Activity中传递数据和跳转
普通的跳转Intent 。假设跳转到新的activity B
Intent intent=new Intent();
intent.setclass(ActivityLife.this,B.class);
startActivity(intent);
跳转时并传数据到新的activity去
Intent intent =new Intent();
Bundle bundle=new Bundle();
bundle.putString("name", TAG);
intent.putExtras(bundle);
startActivity(intent);
有时当一个activity传到下一个activity 的数据 要返回上一个activity 保存数据 这时 需要用到的是startActivityForResult(intent, requestCode);来保存数据。里面的两个参数 一个是intent 另外requestcode相当一个标识符(1,2,3...);
Intent intent=new Intent();
intent.setclass(ActivityLife.this,B.class);
startActivityForResult(intent, 1);
到下一个activity 界面中 接受到上一个activity传来的数据 用setResult();
Intent intent=new Intent();
intetn.putExtra("request1", "requestB");
setResult(1,intent);
在 B activity中 怎么样接收 request1的值 呢 需要用到onActivityResult(requestCode, resultCode, data) 用requestcode来确定;
if(requestcode==1){
String strname=intetn.getStringExtra(request1);
log.i(TAG,strname);
}
OK 以上就是activity的内容 。