Activity生命周期、task、Activity Task、Bundle、Intent。
task是一个Activity栈,用来完成用户的某一个目的,这些Activity可以来自不同的应用程序。每一个Task有自己的 Activity Stack。
假设我们首先在用IReader在看书,从选书到具体书的阅读界面,这是有好几个Activity。我们每一个点击的Activity都被放在阅读这个Task对应的Activity Stack中了,这可以放我们通过回退键返回每一个前面的Activity。我们在阅读到一半时,想看看Sina微博,按Home键离开了IReader。在Sina微博界面也是有多个Activity,我们一步到阅读界面。这时候我们每一个点击的Activity都被放在Sina微博这个Task对应的Activity Stack中了,这可以放我们通过回退键返回每一个前面的Activity。我们这时候再回到IReader读书界面,原先的状态还是保留的。
下面这个图从另外一个角度描述了Application Task Activities的关系
Task通过Application launcher、Home screen的快捷方式或者 由 “Recent Tasks”(长时间按住Home键)最近使用过的Task记录中启动。
当从一个Activity中启动另外一个Activity时,Back键将作用于返回前一个Activity,与此同时 新开启的Activity将被添加到Activity Stack中。
摘自:http://www.cnblogs.com/ghj1976/archive/2011/04/29/2032412.html
OnCreate():在Activity创建时调用。
OnStart():在Activity被用户可见时调用。
OnResume():在Activity可以被用户操作,既响应用户操作时调用。
OnPasuse():在Activity被暂停或者其他资源调用时调用,可以在该方法中保存数据。
OnStop():在Activity完全不可见时调用,如果只是Activity被部分遮挡时不会被调用。
OnRestart():重新启动Activity时调用,该活动仍在栈中,而不是启动新的活动。
OnDestroy():Activity被完全从系统内存中移除时调用,该方法被调用可能是因为有人直接调用onFinish()方法或者系统决定停止该活动以释放资源!
用于不同activity间传递数据。可以存放多种数据类型的数据,如:字符串、int、double等。
Intent用法实例
1.无参数Activity跳转
Intent it = new Intent(Activity.Main.this, Activity2.class); startActivity(it);
2.向下一个Activity传递数据(使用Bundle和Intent.putExtras)
Intent it = new Intent(Activity.Main.this, Activity2.class); Bundle bundle=new Bundle(); bundle.putString("name", "This is from MainActivity!"); it.putExtras(bundle); // it.putExtra(“test”, "shuju”); startActivity(it); // startActivityForResult(it,REQUEST_CODE);
对于数据的获取可以采用:
Bundle bundle=getIntent().getExtras(); String name=bundle.getString("name");
3.向上一个Activity返回结果(使用setResult,针对startActivityForResult(it,REQUEST_CODE)启动的Activity)
Intent intent=getIntent(); Bundle bundle2=new Bundle(); bundle2.putString("name", "This is from ShowMsg!"); intent.putExtras(bundle2); setResult(RESULT_OK, intent);
4.回调上一个Activity的结果处理函数(onActivityResult)
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (requestCode==REQUEST_CODE){ if(resultCode==RESULT_CANCELED) setTitle("cancle"); else if (resultCode==RESULT_OK) { String temp=null; Bundle bundle=data.getExtras(); if(bundle!=null) temp=bundle.getString("name"); setTitle(temp); } } }
摘自:http://www.cnblogs.com/feisky/archive/2010/01/16/1649081.html