您的位置:首页 > 职场人生

Android面试题(一)——Activity的生命周期和启动模式

2016-07-03 19:44 519 查看

引言

这份面试题系列文章旨在查漏补缺,通过常见的面试题发现自己在Android基础知识上的遗漏和欠缺,验证所学是否扎实。

这是系列的第一章,后面我会根据安卓知识模块分类并网罗分析各种常见面试题。

面试题:

Activity的生命周期

答:onCreate->onStart->onResume->Activity运行->新的Activity运行->onPause->onStop->onDestroy->Activity销毁



Activity的启动方式

答:四种启动模式,standard, singleTask, singleTop, singleInstance。

standard:标准模式,在当前的任务栈上创建新的Activity,不论之前有没有创建过该Activity。注意:ApplicationContext无法启动standard模式的Activity。

singleTask:栈内复用模式,分两种情况,第一种情况:如果有任务栈里已经创建了该Acitiviy,直接销毁该Acitivity栈上面的所有Acitivity,无须新创建一个Activity;第二种情况:如果没有任务栈里已经创建该Activity,创建一个新的任务栈并在新栈上创建新Activity。注意:该模式下复用Activity,系统会调用Activity的onNewIntent方法。

singleTop:栈顶复用模式,如果该Activity在任务栈栈顶,即当前活动的Acitivty就是要创建的Activity,那么不会创建新的Activity。注意:该模式下复用Activity,系统会调用Activity的onNewIntent方法。

singleInstance:单实例模式,加强版的singleTask,当每次都直接创建一个新的任务栈,再在该新栈上创建新Activity。注意:singleInstance永远是单栈单Activity

onSaveInstanceState和onRestoreInstanceState调用的过程和时机

调用时机:Activity的异常情况下(例如转动屏幕或者被系统回收的情况下),会调用到onSaveInstanceState和onRestoreInstanceState。其他情况不会触发这个过程。但是按Home键或者启动新Activity仍然会单独触发onSaveInstanceState的调用。

调用过程:旧的Activity要被销毁时,由于是异常情况下的,所以除了正常调用onPause, onStop, onDestroy方法外,还会在调用onStop方法前,调用onSaveInstanceState方法。新的Activity重建时,我们就可以通过onRestoreInstanceState方法取出之前保存的数据并恢复,onRestoreInstanceState的调用时机在onCreate之后



Activity A调用Activity B时,A调用什么函数?

旧的Activity的onPause方法执行结束,才执行新的Activity的onCreat, onState和onResume方法。

onPause方法中不能有重量级的任务,不然会影响新Activity的创建。

onNewIntent的作用和调用时机?

调用时机:如果Activity的启动模式是:singleTop, singleTask, singleInstance,在复用这些Acitivity时就会在调用onStart方法前调用onNewIntent方法

作用:让已经创建的Activity处理新的Intent。

fragment的生命周期



fagement和Activity的通信

有五种方法

Fragment可以通过getActivity()访问Activity实例,并轻松地执行在Activity布局中查找视图等任务。

View listView = getActivity().findViewById(R.id.list);


Activity可以通过FragmentManager的findFragmentById()或findFragmentByTag(),获取对Fragment的引用。

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);


创建对Activity的事件回调

在fragment中定义一个回调接口,并要求宿主Activity实现它。当Activity通过该接口受到回调时,可以根据需要与布局中的其他片段共享这些信息。

代码示例:

public static class FragmentA extends ListFragment {
...
// Container Activity must implement this interface
public interface OnArticleSelectedListener {
public void onArticleSelected(Uri articleUri);
}
...
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnArticleSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Append the clicked item's row ID with the content provider Uri
Uri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id);
// Send the event and Uri to the host activity
mListener.onArticleSelected(noteUri);
}
}


向操作栏添加项目

通过Fragment.setArguments向Fragment传递参数

public void setArguments(Bundle args)
final pubilc Bundle getArguments()


知识点

Activity典型情况下的生命周期分析

Activity异常情况下的生命周期分析

Activity的启动模式

Fragment的生命周期

Activity和Fragment的通信方法

参考资料:

fagement官方文档

《Android开发艺术探究》

个人博客:https://yoxin.github.io/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 面试题