通过activity返回数据
在otheractivity中通过setResult(int resultcode,Intent data);设置数据
在mainactivity中通过重写onactivityresult(int requestcode,int resultcode,Intent data);
来获得返回的数据,
与此同时开启另一个activity时使用startactivityforresult。
2.隐式意图启动activity
显式意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件
在清单文件中定义<activity>时需要定义<intent-filter>才能被隐式意图启动
<activity
android:name=".OtherActivity"
>
<!-- 必须加category,否则报错 -->
<intent-filter>
<action android:name="com.example.activityTest"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="other"/>
</intent-filter>
</activity>
<intent-filter>中至少配置一个<action>和一个<category>,否则无法被启动
Intent对象中设置的action、category、data在<intent-filter>必须全部包含才能启动
例如启动上面的activity时;
Intent intent=new Intent();
intent.setAction("com.example.activityTest");
intent.setData(Uri.parse("other:123123"));
<intent-filter>中的<action>、<category>、<data>都可以配置多个,Intent对象中不用全部匹配,每样匹配一个即可启动
如果一个意图可以匹配多个Activity,Android系统会提示选择
activity生命周期:
Acitivity三种状态
运行:activity在最前端运行
暂停:activity可见,但前端还有其他activity,被覆盖一部分,或者前端activity透明
停止:activity不可见,完全被覆盖
生命周期相关方法
onCreate:创建时调用,或者程序在暂停、停止状态下被杀死之后重新打开时也会调用
onStart:onCreate之后或者从停止状态恢复时调用
onResume:onStart之后或者从暂停状态恢复时调用,从停止状态恢复时由于调用onStart,也会调用onResume
onPause:进入暂停、停止状态,或者销毁时会调用
onStop:进入停止状态,或者销毁时会调用
onDestroy:销毁时调用
onRestart:从停止状态恢复时调用
当我们进行横竖屏切换时,activity会被摧毁,执行onPause onStop onDestroy onCreate onStart onResume
这是我们可以在清单文件中给activity添加属性, android:configChanges="orientation"这个属性可以监听到方向的改变
通过添加 android:screenOrientation="landscape"指定屏幕始终是横屏
但是有时我们希望改变屏幕方向后,原来的数据还可以被保存:这时可以用下面两个方法
onSaveInstanceState:在Activity被动的摧毁或停止的时候调用,用于保存运行数据,可以将数据存在在Bundle中
onRestoreInstanceState:该方法在Activity被重新绘制的时候调用,例如改变屏幕方向,savedInstanceState为onSaveInstanceState保存的数据
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getString("out");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putString("out", "推出时的数据");
}
启动模式:
在AndroidManifest.xml中的<activity>标签中可以配置android:launchMode属性,用来控制Actvity的启动模式
在Android系统中我们创建的Acitivity是以栈的形式呈现的
standard:每次调用startActivity()启动时都会创建一个新的Activity放在栈顶
singleTop:如果启动的Activity时,指定Activity不在栈顶就创建,如在栈顶,则不再创建
singleTask:如果启动的Activity不存在就创建,如果存在直接跳转到指定的Activity所在位置
singleInstance:如果启动的Activity不存在就创建,如果存在就将指定的Activity移动到栈顶
1.stantard, 2.singleTop, 3.singleTask, 4.singleInstance
1.标准启动模式
对于每创建一个activity都放在栈里,例如有两个activity A,B,先启动A时,a入栈,b启动,b入栈,a再启动,a再入栈,此时栈里有两个a
2.
singleTop
a,b两个activity,a先入栈。b后入栈,后来再创建a时,则创建a,如果再需要b则创建b,如果再需要b,则不创建新的。
3.singleTask
abcd四个activity,abcd一次入栈,需要a时直接指到a,上面的activity删除。
4.singleInstance
abcd四个activity,abcd依次入栈,如果需要a,则将a移动到栈顶
Android系统在运行多个进程时,如果系统资源不足,会强制结束一些进程。优先选择哪个进程来结束是有优先级的。以下顺序靠上的优先结束
空:进程中所有Activity都已销毁
后台:进程中有一个停止状态的Activity
可见:进程中有一个暂停状态的Activity
前台:进程中正在运行一个Activity
什么是ANR
application not response!!
这是由于在主线程中处理一些耗时的操作,所以为避免产生anr异常。耗时的操作应该放在子线程中来做。