Activity是安卓中使用最多的一个组件,其用来显示界面,负责与用户的交互。Activity运行与主线程中,不可以在其中直接操作比较耗时的操作,如果超过5秒就会出现ANR,如果直接操作网络就会报错。使用时需要在manifest文件中注册,其继承关系为:Activity-->ContextThemeWrapper--->ContextWrapper--->Context.
生命周期:
直接启动:onCreate()-->onStart()-->onResume()--->onWindowFocuschanged();
启动后按back键:onPause()-->onWindowFocuschanged()--->onStop()-->onDestroy();
启动后按home键:onPause()-->onWindowFocuschanged()--->onStop();
按home键后重新进入:onRestart()-->onStart()-->onResume()-->OnWindowFocusChanged();
竖屏转横屏:onPause()-->onSaveInstanceState()-->onStop()-->onDestroy()-->onCreate()-->onStart()-->onRestoreInstanceState()-->onResume()-->onWindowFocusChanged();
横屏转竖屏:同上
一个Activity跳转到另一个Activity:onPause()-->onWindowFocusChanged()-->onSaveInstanceState()-->onStop();
然后按返回键:onRestart()-->onStart()-->onResume()-->OnWindowFocusChanged();
弹出一个Dialog:OnWindowFocusChanged();
销毁Dialog:OnWindowFocusChanged();
Activity的四种启动模式:
Standard:标准的启动模式,每调用一次Activity都创建一个新的实例。
SingleTop:如果跳转的Activity位于Task的顶部就不创建新的,否则创建新的实例。
SingleTask:创建一个实例,并且位于新的Task里面,再次调用就不会创建新的了。
SingleInstance:只有一个Activity实例,如果不在Task顶部就销毁上面的Activity,如果不存在就创建。
从一个Activity启动另一个Activity有两种启动方式,第一种是需要返回结果的,一种是不需要返回结果的,我看了源码,发现其实不需要返回结果的方法在底层也是调用的返回结果的,只是把请求码改为了-1,。
不需要返回结果的启动:
Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtras(bundle); startActivity(intent);
// bundle传数据,如果需要传对象,需要把对象实现Parcelable接口 Bundle bundle = new Bundle(); bundle.putBoolean("isRaining", true); // intent显示启动 Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtras(bundle); startActivityForResult(intent, 2);然后重写onActivityResult()方法:
// 获取返回的数据 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.e(TAG, data.getStringExtra("result")); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); boolean isRaining = getIntent().getExtras().getBoolean("isRaining", false); Log.e("SecondActivity", isRaining + ""); Intent intent = new Intent(this, MainActivity.class); intent.putExtra("result", "你需要打伞"); setResult(3, intent); finish(); }
源码下载:Demo下载