您的位置:首页 > 移动开发 > Android开发

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

2018-02-10 20:52 239 查看
Android 各个活动之间的通信以及互动主要是通过Intent来进行互动交互,而Intent主要就是有两种方法,显示的Intent
和隐式的Intent
对于显示的IntentIntent 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.启动一个活动时,可以在要被启动的函数中写一个函数用来缓冲启动,参数是需要的数据,这样看到函数就知道要传什么数据



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: