前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安卓的四大组件之Activity-活动

安卓的四大组件之Activity-活动

作者头像
Youngxj
发布2018-06-07 15:32:02
7980
发布2018-06-07 15:32:02
举报
文章被收录于专栏:YoungxjYoungxj
安卓的四大组件之Activity-活动.jpg
安卓的四大组件之Activity-活动.jpg

1、什么是Activity?

四大组件之一,一般的,一个用户交互界面对应一个activity,setContentView()设置要显示的布局,activity是Context的子类,同时事件了Window.callback和Keyevent.callback,可以处理与窗体用户交互相关的事件。开发常用的有FragmentActivity,ListActivity,TabActivity等等、、

2、描述Activity的生命周期?

Activity从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括:onCreare、onStart、onRasume、onPause、onStop、onDestroy、还有onRestart

其实这些方法都是两两对应的,onCreate创建于onDestroy销毁;onStart可见与onStop不可见;onResume可编辑(获取焦点)与onPause不可交互;如果界面有共同的特点或者功能的时候,还会自己定义个一个BaseActivity来使用。

3、如何保存Activity的状态?

Activity的状态通常情况下系统会自动保存的,只是当我们需要保存额外的数据时才需要使用到这样的功能。

一般来说,调用onPause方法后的activity实例仍然存在与内存中,activity的所有的信息和状态数据不会消失,当activity重新回到前台之后,所有的改变会得到保留。

但是当系统内存不足时,调用onPause和onStop方法后,activity的实例可能会被系统摧毁,此时内存中就不会有activity的实例存在了。如果之后这个activity重新回到前台,之前所做的改变就会消失,为了避免这种情况的发生,我们可以覆写onSavaInstanceState方法。onSaveInstanceState方法接收一个Bundle类型的参数,开发者可以将状态数据存储到这个Bundle对象中,这样即使activity被系统回收了,但是用户重启这个activity而调用它的onCreate方法的时候,上面的Bundle对象会作为实际参数传递给onCreate方法,开发者可以从Bundle对象取出保存的数据,然后利用这些数据将activity回复到被摧毁之前的状态。

需要注意的是,onSavaInstanceState方法不一定会被调用,因为有些场景不需要保存状态数据,比如用户按下BACK键后退出activity时,用户显然想要关闭这个avtivity,此时是没有必要保存数据以提供下一次恢复数据的,也就是方法不会被调用,如果调用了onSavaIstanceState那么它将在onPause和onStop方法之前被调用。

代码语言:javascript
复制
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
}

4、两个Activity之间跳转必将经历那些生命周期方法?

A要开启B,那么A会调用onPause,然后B会调用onCreate,onStart,onRasume方法,这个时候B覆盖了A,导致A调用onStop方法,但是需要注意的是:如果B的窗口是透明的,那么就算是B覆盖了A,那么A也不会调用onStop方法。

5、横竖屏切换的Activity的生命周期

切换横竖屏的时候,会不会重新调用Acticity的生命周期方法,取决于此Activity有没有在清单文件里面配置

代码语言:javascript
复制
android:configChanges="orientation|keyboardHidden|screenSize" 

如果配置了,那么不会重新走生命周期方法,只会调用onConfigurationChanged 方法。通常在游戏中,屏幕的方向都是用代码写死的。

6、如何将Activity设置成窗口的样子?

只需要我们的Activity配置一下的属性即可:

代码语言:javascript
复制
android:theme="@android:style/Theme.Dialog 

7、如何退出Activity和关闭已经开启多个Activity的Application?

如果只是关闭一个Activity,我们只需要调用一下finish方法即可。

如果是开启了多个Activity的Application那么:

用一个List集合把前面打开的所有的Activity都存起来,在需要退出的时候,遍历出来,一个一个关闭即可

代码语言:javascript
复制
List<Activity> lists ;// 在 application 全局的变量里面 
lists = new ArrayList<Activity>();
lists.add(this);
for(Activity activity: lists)
{
activity.finish();
}
lists.remove(this);

发送特定的广播

对每一个需要关闭的Activity都注册一个,广播接收者,在需要关闭的时候发送一个广播,然后让收到广播的Acitcity关闭即可

代码语言:javascript
复制
registerReceiver(receiver, filter)

给一个Activcity注册广播接收者: 在打开后面一个Activity的时候,我们可以用StartActivityForResult来开启,这样当被开启的Acitivity销毁的时候就会调用前一个Activity的onActivityResult方法,那么我们就可以在这个方法里面finish掉自己。

其实 也可以通过 intent 的 flag 来实现 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

激活一个新的 activity。此时如果该任务栈中已经有该 Activity,那么系统会把这个 Activity 上面的

所有 Activity 干掉。其实相当于给 Activity 配置的启动模式为 SingleTask

8、Context、Activity、Application有什么区别?

相同点:Activity和Application都是Context的子类。

Context从字面上理解就是上下文的意思,姿势及应用中,它也确实起到了管理上下文环境中各个参数和变量的用途,类似于一个工具包,可以让我们方便的访问各种资源。

不同点:维护的生命周期不同。Context维护的是当前的Activity的生命周期,Applacation维护的是整个项目的生命周期。

使用Context的时候,小心内存泄露,防止内存泄露,注意以下的几个方面:

⒈不要让生命周期长的对象引用activity和context,即保证引用activity的对象要与activity本身的生命周期一样长。

⒉对于生命周期,可以使用application,context

⒊避免非静态的内部类,尽量使用静态类,避免生命周期的问题,注意内部类对外部对象引用导致的生命周期的变化。

9、两个Activity之间传递数据,除了intent,广播接收者,content provider还有啥?

⒈利用static静态数据,public static成员变量

⒉利用外部存储的运输,例如File文件,SharedPreferences(首选)

⒊DB(数据库)

10、Context是什么?

⒈它描述的是一个应用程序环境的信息,即上下文。

⒉该类是一个抽象类(abstract),Android提供了该抽象类的具体实现类(Contextlml)。

⒊通过它,我们可以获取应用程序的各种资源和类,也包括一些应用级别的操作,例如:启动一个Activity、发送一个广播、接收intent、信息、等等

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档