第一行代码
2.2intent的显示
1.显示
//启动另一个窗口
//第一个参数是上下文,第二个参数是跳转的界面
Intent intent=new Intent(this,Main2Activity.class);
startActivity(intent);
理解:
显示的意图需要上下文以及明确的跳转对象
2.隐式:
<activity android:name=".Main2Activity" >
<intent-filter >
<action android:name="com.xample.a23intent_tranfer.ACTION_START"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
注意:没有分组的情况下无法进行隐式意图。
理解:活动可能存在多个,但是必须存在分组,默认intent都是会选择
分组 android.intent.category.DEFAULT。
3.其他的隐式意图操作
01:
//打开浏览器
Intent intent=new Intent(Intent.ACTION_VIEW);
//指定intent操作的数据
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
02自定义可以被当作浏览器打开的程序
xml
<activity android:name=".Main3Activity">
<intent-filter>
<action android:name="android.intent.action.VIEW"></action>
<!-- 设置可以接受的数据类型 -->
<data android:scheme="http"></data>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
03响应手机
Intent intent=new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
2.3.4intent传递数据
1.普通传递方法
传递数据
//传递数据
//第一个数据是键值,第二个是传递的数据
intent.putExtra("key","hello");
接受数据
//获得其他页面给它的意图
Intent intent=getIntent();
String msg=intent.getStringExtra("key");
缺点:
这种方法的数据传递对于键值的传递并不是很好,
我们可以对所有的activity封装一个getNewIntent的方法,
接受要传递的值,键值封装在里面。
2.静态工厂模式
Intent intent=new Intent(context,this.getClass());
intent.putExtra("key",val);
return intent;
2.3.5返回数据给上一个界面
启动activity还有一种方法是startActivityForResult,这种方法
是当跳转的第二个页面销毁的时候会回调 protected void onActivityResult函数
//第一个参数是发送的意图,第二个参数是响应码
//startActivityForREsult的启动方法是当响应的哪一个界面被销毁的时候返回信息
startActivityForResult(intent,1);
回调结果
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case 1:
}
}
通过back键返回的数据传递方法
public void onBackPressed() {
super.onBackPressed();
Intent intent=new Intent();
intent.putExtra("key","hh");
setResult(RESULT_OK,intent);
}
2.4.4activity的生存周期
1.当某一个界面属于onResume的状态时,如果没有完全被另一个
启动的界面遮挡,那么将会进入onPasue状态,而不是onStop状态。
2.4.5活动被回收了怎么办
当你从a活动到达b活动后,如果手机的内存不够的话就会把你的a活动
回收。当你返回到a活动的时候,a活动将会重新被创建,但是a活动
的数据就会消失,但是我们可以使用下面的一个函数来保存数据。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.get("hello");
}
这个函数是依靠Bundle来保存数据的,我们也可以利用bundle来
传递数据。
intent.putExtra("key",savedInstanceState);//将bundle保存在intent里
intent.getBundleExtra("key");//获得bundle
2.5活动的启动模式
如何使用:
在AndroidManifest中设置android.lanuch_mode
1.standard
标准的启动模式
2.singleTop
单一的启动模式,只能存在一个在栈顶的activity
但是如果不在栈顶的化,将会创建一个全新的实例
3.singleTask
某一个activity只会在栈中存在一个实例
4.singleInstance