Android活动之间的互动,生命周期

Android 各个活动之间的通信以及互动主要是通过Intent来进行互动交互,而Intent主要就是有两种方法,显示的Intent

和隐式的Intent

对于显示的Intent

Intent intent = new Intent(FistActivity.this,SecondActivity.class);
startActivity(intent);
这部分代码可以插入在触发时间中,这样子的话,当点击按钮时,就可以进入到另一个活动,参数一是当前活动上下文

参数二是要去往的活动,通过statyActivity来启动这个活动

对于隐式的Intent,需要在AndroidManifest.xml,添加过滤器

<intent-filter>
   <action android:name="com.XXXXXXX"/>
   <category android:name="android.intent.categoty.DEFAULT/>
<intent-filter>
只要当action 和 category 完全匹配时,才会启动该活动,不然会报错,程序崩溃,同时需要在Java中改变代码为

Intent intent = new Intent("com.example.XXXX")
startActivity(intent);
因为在xml标签中设置的是DEFAULT,所以就算java不设置标签,也可以跳用对应的活动


一个Intent只对应一个活动,但可以对应多个标签

在Intent中添加标签使用的是

intent.addCategory("XXXXX");

隐式的还可以与其他的应用进行对话,比如打开网页

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
先将Action设置为Android内置的视图,然后就可以调用手机内置的活动,然后调用setData的方法,将网址通过Uri.parse

这个方法字符串解析为Uri,然后进行设置。就可以开启一个网页intent可以设置<data>标签

如上所示,可以把各个设置的data进行过滤。


然后我们可以通过Intent在视图之间传输数据

String data = “hello secondActivity”;
Intent intent = new Intent(FisrActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
通过putExtra函数向intent中传输数据,第一个参数是键,第二个参数是数据

既然数据保存在intent,那我们现在需要把他们取出来

Intent intent = getIntent();
String data = intent.getStringExtra("data_extra");
通过函数getIntent(),来得到启动我的intent的信息,然后通过getXXXXExtra函数得到传过来的数据

这是把这一层的数据传给下一层,那么如何把数据传给上一层呢

首先启动下一层的Activity可以这么写

Intent intent = new Intent(Context,Activity);
startActivityForResult(intent,1);
使用函数startActivityForResult可以得到下一层的返回数据,1是请求码,一般是惟一的。

而在下一层存数据方法差不多

Intent intent = getIntent();
intent.putExtra("data_return","Hello FIrstActivity");
setResult(Result_OK,intent);
finish();
多加了一个setResult(),专门用来向上一层活动返回数据,第一个参数返回处理结果,一般是OK 或者 CANCELED,第二把有数据的intent传回去。

而因为是通过startActivityForResult(),所以回来以后会启动OnActivityResult这个函数,我们需要覆写


先对requestcode进行判断因为可能启动多个活动,我们要确定是不是第二个活动传回来的,然后如果是,并且resultCode是OK,那么就用getStringExtra()来得到数据。

那么如果用户是按返回键回去呢?

我们只需要覆写

onBackPressed这个函数就好了

各个活动是存在栈中




这是活动的存活周期

有可能你的活动处于stop,但是内存不够,被destory,但是我们需要保存其中的临时信息,那么怎么办

通过覆写onSaveInstanceState(Bundle outState)


在这个函数里我们把需要保存的数据存在这里面,通过Bundle的putString,把数据存在Bundle,很类似Intent的putExtra

而恢复只要在onCreate()中进行就行了

如果之前没有保存,那么savedInstanceState会是Null,那么我们可以使用getString来得到,与Intent非常类似


活动启动模式

standard就是你启动就往栈顶放

singletop就是如果栈顶和你要启动的一样那么就不创建新的活动

更改启动模式是在


这里更改

singleTask则是你启动一个活动,看栈里面有没有有的话直接把其他的弹出来,让他处于栈顶

singleInstance 会为该活动单独设置一个栈,其他的活动访问的都是这个栈

几个小技巧

1.可以设置一个BaseActivity类,继承AppCompactActivity,然后其他所有类继承他,并在onCreate方法加入Log打印类名

这样app运行时就知道哪个类属于哪个类

2.设置一个活动管理器,所有的活动被创建就放入这个数组中,摧毁时就移除,当按一个键时,就可以把所有的活动全部清空

3.启动一个活动时,可以在要被启动的函数中写一个函数用来缓冲启动,参数是需要的数据,这样看到函数就知道要传什么数据



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值