杨小杰博客(Youngxj)提供免费教程下载和网站搭建技术教程,主要分享和发布网站源码,致力创造一个高质量网络资源教程的分享平台

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

Young小杰2016-11-20 13:07Android(0)1070查询中……小标签: 安卓软件技术 Android 四大组件

安卓的四大组件之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方法之前被调用。


@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有没有在清单文件里面配置


android:configChanges="orientation|keyboardHidden|screenSize" 


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


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

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

android:theme="@android:style/Theme.Dialog 


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

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

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

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


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


发送特定的广播

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

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、信息、等等

本文转自诡道网!由杨小杰blog进行排版整合。




本文最后更新于2016-11-20,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!

发表评论:

手机扫描二维码
阅读体验更佳