android 四大组件之activity(活动)
四大组件之一,是用户唯一可以看到的东西,主要用来跟用户进行交互,通过setContextView(view);来显示布局。
生命周期
当第一次调用一个Activity就会执行onCreate方法
当Activity处于可见状态的时候就会调用onStart方法
当Activity可以得到用户焦点的时候就会调用onResume方法
当Activity没有被销毁的时候重新调用这个Activity就会调用onRestart方法
当Activity被遮挡住的时候就会调用onPause方法
当Activity处于不可见状态的时候就会调用onStop方法
当Activity被销毁时会调用onDestory方法
activity转到下一个活动 通过意图 Intent
Intent intent=new Intent(mainactivity.this,目标activity.class);
startActivity(intent)
一个新的activity 需要在Androidmanifest中注册 有两种注册方式 一种显示一种隐式
显示:《application》中<activity android:name=".新activity"></activity>
隐式:如果是隐式的话那么就不能用上面拿个Intent 的方法了我们需要换一个
Intent intent=new Intent(); intent.setAction("你自己起名字")
startActivity(intent)
<activity android:name=".新activity">
<intent-filter>
<action android:name="你自己起名字"> //这个名字最好起的规范点
<category android:name="android.intent.category.DEFAULT">
</intent-filter>
</activity>
在这里通过隐式Intent可以启动很多其他程序的应用 如
<category android:name="android.intent.action.DIAL">表示打电话的意图,系统会找到能处理这个意图的Activity,例如调出拨号面板。
Intent intent =new Intent(Intent.ACTION_DIAL);
// 或者Intent intent = new Intent("android.intent.action.DIAL");
// Intent.ACTION_DIAL是内置常量,值为"android.intent.action.DIAL"
startActivity(intent);
可以通过finish()推出activity 但是并没有销毁activity 只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理;当调用System.exit(0)时,杀死了整个进程,这时候活动所占的资源也会被释放。
向下一个activity 传递数据
Intent intent=new Intent(xxxx.this,xxx.class);
intent.putExtra("key",value);
startActivity(intent);
获取数据
Intent intent=getIntent();
intent.getStringExtra("key");
向上一个活动返回数据
Intent i=new Intent(xxx.this,xxx.class);
StartActivityForResult(i,1);//通过这个方法来启动 传入一个数值
在下一个服务器中 返回事件中写
Intent int=new Intent();//构建Intent,但是只是用来传递数据,没有任何意图
intent.putextra("key",value);
setResult(RESUTL_OK,Intent); finish(): //把数值返回去
在上一个活动中重写onActivityResult();
方法中 switch(requestCode){
case 1:
if(resultCode==RESULT_OK){
String returnedDate=data.getStringExtra("key");
}break;
}
当活动进入停止状态也就是 onStop()那么它有可能被系统回收,有时候我们在活动中有一些临时数据需要如果活动被回收了那么数据也就不再存在,所以,在活动中有一个onSaveInstanceState()方法,它会在活动被销毁前执行,返回一个bundle 所以我们可以用这个bundle来存储临时数据。
有时候我们会有这样的需求,看书时回到上一次退出程序的页面,这个需求我们也可以通过onSaveInstanceState()实现,只不过不是存在bundle中,而是将他存在文件,或者数据库中,在每次启动程序的适合,恢复上次退出的样子
活动的4种启动模式
第一种就是我们最常用的Standard他是活动的默认启动方式,在不指定显示的情况下都是用这种,这种模式下,每次通过Intent启动一个活动时都会启动一个活动。
第二种SingleTop,在Standard默认的启动模式下,如果活动在栈定了再次启动是还会创建一个新的活动,SingleTop则不同,如果活动在栈定了,你在去创建这个活动,他不会再去创建不执行onCreate方法
第三种singleTask,在SingleTop启动模式下,如果活动不在栈顶,那么还是可以创建活动,那么在singleTask模式下,每次启动活动时,会在栈中查找,有没有这个活动,如果有这个活动,那么就直接使用这个活动实例,这个时候不会在调用onCreate方法,并且将这个活动之上的活动全部踢出栈,如果没有发现,那么就创建一个新的活动,这个时候,只要按一下back键就可以推出程序了
第四种singlelnstance,这种启动模式死最复杂的一种了,使用这种模式会启动一个新的栈开管理这个活动,这样子有什么意义呢?这种模式一般是用来给其它程序访问此活动
修改模式需要在AndroidManifest中 <activity>android:launchMode="xxxx"指定启动模式
活动实践技巧
知道自己在哪个activity下面 ,创建一个TextActivity继承Activity 重写onCreate()打印Log.d("XXX",getClass.getSimpleName()); 然后把将需要知道的activity继承TextActivity();所以当每次执行时候就会调用Log.d();就能知道在哪个Activity