9419页最新一线互联网Android面试题解析大全

网上高级工程师面试相关文章鱼龙混杂,要么一堆内容,要么内容质量太浅, 鉴于此我整理了以下安卓开发高级工程师面试题以及答案帮助你们顺利进阶,下面进入正题:android

1、Android相关

1.Activity

1.1生命周期

  • Activity A 启动另外一个Activity B,回调以下:

Activity A 的onPause() → Activity B的onCreate() → onStart() → onResume() → Activity A的onStop();若是B是透明主题又或则是个DialogActivity,则不会回调A的onStop;git

  • 使用onSaveInstanceState()保存简单,轻量级的UI状态
lateinit var textView: TextView
var gameState: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    gameState = savedInstanceState?.getString(GAME_STATE_KEY)
    setContentView(R.layout.activity_main)
    textView = findViewById(R.id.text_view)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
    textView.text = savedInstanceState?.getString(TEXT_VIEW_KEY)
}
override fun onSaveInstanceState(outState: Bundle?) {
    outState?.run {
        putString(GAME_STATE_KEY, gameState)
        putString(TEXT_VIEW_KEY, textView.text.toString())
    }
    super.onSaveInstanceState(outState)
}

1.2如何保存Activity的状态?

通常来讲,调用onPause()和onStop()方法后的Activity实例仍然存在于内存中,Activity的全部信息和状态数据不会消失,当Activity从新回到前台后,全部的改变都会获得保留。github

可是当系统内存不足时,调用onPause()和onStop()方法后的Activity可能会被系统摧毁,此时内存中就不会存有该Activity的实例对象了。若是以后这个Activity从新回到前台,以前所作的改变就会消失,为避免此种状况的发生,咱们能够复写onSaveIntanceState()方法。onSaveInatanceState()方法接受一个Bundle类型的参数,开发者能够将状态数据存储到这个Bundle对象中。若是滴啊用onSaveInstanceState()方法,调用将发生在onPause()或onStop()方法以前。面试

1.3如何保存 Activity 的状态?

Activity 的状态一般状况下系统会自动保存的,只有当咱们须要保存额外的数据时才须要使用到这样的功能。数据库

通常来讲, 调用 onPause()和 onStop()方法后的 activity 实例仍然存在于内存中, activity的全部信息和状态数据不会消失, 当 activity 从新回到前台以后, 全部的改变都会获得保留。安全

可是当系统内存不足时, 调用 onPause()和 onStop()方法后的 activity 可能会被系统摧毁, 此时内存中就不会存有该activity 的实例对象了。若是以后这个 activity 从新回到前台, 以前所做的改变就会消失。为了不此种状况的发生 ,咱们能够覆写 onSaveInstanceState() 方法。onSaveInstanceState()方法接受一个 Bundle类型的参数, 开发者能够将状态数据存储到这个Bundle对象中, 这样即便activity被系统摧毁,当用户从新启动这个activity而调用它的onCreate()方法时, 上述的 Bundle 对象会做为实参传递给onCreate()方法, 开发者能够从 Bundle 对象中取出保存的数据, 而后利用这些数据将 activity恢复到被摧毁以前的状态。性能优化

须要注意的是, onSaveInstanceState()方法并非必定会被调用的, 由于有些场景是不须要保存状态数据的. 好比用户按下 BACK 键退出 activity 时, 用户显然想要关闭这个 activity, 此时是没有必要保存数据以供下次恢复的, 也就是 onSaveInstanceState() 方法不会被调用. 若是调用onSaveInstanceState()方法, 调用将发生在 onPause()或 onStop()方法以前。服务器

@Override
   protected void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub super.onSaveInstanceState(outState);
}
  • 1.4 两个Activity之间跳转时必然会执行的是哪几个方法?
  • 1.5 横竖屏切换时Activity的生命周期
  • 1.6 如何将一个Activity设置成窗口的样式
  • 1.7 如何退出Activity?如何安全退出已调用多个Activity的Application?
  • 1.8 Android中的Context, Activity,Appliction有什么区别?

........网络

面试题解析内容所有免费分享, 有须要完整版的小伙伴【点击我】免费获取哦!

2.Service

2.1Service是否在main thread中执行, service里面是否能执行耗时的操做?

默认状况,若是没有显示的指servic所运行的进程, Service和activity是运行在当前app所在进程的main thread(UI主线程)里面。数据结构

service里面不能执行耗时的操做(网络请求,拷贝数据库,大文件 )

特殊状况 ,能够在清单文件配置 service 执行所在的进程 ,让service在另外的进程中执行。

<service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>

2.2Activity怎么和Service绑定,怎么在Activity中启动本身对应的Service?

Activity经过bindService(Intent service, ServiceConnection conn, int flags)跟Service进行绑定,当绑定成功的时候Service会将代理对象经过回调的形式传给conn,这样咱们就拿到了Service提供的服务代理对象。

在Activity中能够经过startService和bindService方法启动Service。通常状况下若是想获取Service的服务对象那么确定须要经过bindService()方法,好比音乐播放器,第三方支付等。若是仅仅只是为了开启一个后台任务那么可使用startService()方法。

2.3说说Activity、Intent、Service是什么关系

他们都是Android开发中使用频率最高的类。其中Activity和Service都是Android四大组件之一。他俩都是Context类的子类ContextWrapper的子类,所以他俩能够算是兄弟关系吧。不过兄弟俩各有各自的本领,Activity负责用户界面的显示和交互,Service负责后台任务的处理。Activity和Service之间能够经过Intent传递数据,所以能够把Intent看做是通讯使者。

  • 2.4 Service和Activity在同一个线程吗?
  • 2.5 Service有哪些启动方法,有什么区别,怎样停用Service?
  • 2.6 什么是IntentService?有何优势?
  • 2.7 请描述一下Service的生命周期
  • 2.8 Service启动过程

......

面试题解析内容所有免费分享, 有须要完整版的小伙伴【点击我】免费获取哦!

3. ListView

3.1ListView如何提升其效率?

当convertView为空时,用setTag()方法为每一个View绑定一个存放控件的ViewHolder对象。当convertView不为空,重复利用已经建立的view的时候,使用getTag()方法获取绑定的ViewHolder对象,这样就避免了findViewById对控件的层层查询,而是快速定位到控件。

① 复用ConvertView,使用历史的view,提高效率200%
② 自定义静态类ViewHolder,减小findViewById的次数。提高效率50%
③ 异步加载数据,分页加载数据。
④ 使用WeakRefrence引用ImageView对象。

3.2ListView如何实现分页加载

① 设置ListView的滚动监听器:setOnScrollListener(new OnScrollListener{….})
在监听器中有两个方法: 滚动状态发生变化的方法(onScrollStateChanged)和listView被滚动时调用的方法(onScroll)

② 在滚动状态发生改变的方法中,有三种状态:
手指按下移动的状态:SCROLL_STATE_TOUCH_SCROLL: // 触摸滑动
惯性滚动(滑翔(flgin)状态):SCROLL_STATE_FLING: // 滑翔
静止状态: SCROLL_STATE_IDLE: // 静止

对不一样的状态进行处理:

分批加载数据,只关心静止状态:关心最后一个可见的条目,若是最后一个可见条目就是数据适配器(集合)里的最后一个,此时可加载更多的数据。在每次加载的时候,计算出滚动的数量,当滚动的数量大于等于总数量的时候,能够提示用户无更多数据了。

3.3ListView能够显示多种类型的条目吗

这个固然能够的,ListView显示的每一个条目都是经过baseAdapter的getView(int position, View convertView, ViewGroup parent)来展现的,理论上咱们彻底可让每一个条目都是不一样类型的view。

好比:从服务器拿回一个标识为id=1,那么当id=1的时候,咱们就加载类型一的条目,当id=2的时候,加载类型二的条目。常见布局在资讯类客户端中能够常常看到。

除此以外adapter还提供了getViewTypeCount()和getItemViewType(int position)两个方法。在getView方法中咱们能够根据不一样的viewtype加载不一样的布局文件。

  • 3.4当ListView数据集改变后,如何更新ListView
  • 3.5ListView如何定位到指定位置
  • 3.6如何在ScrollView中如何嵌入ListView
  • 3.7ListView中如何优化图片
  • 3.8ListView中图片错位的问题是如何产生的

......

4.Fragment

  • 什么是Fragment ?
  • Fragment的生命周期
  • Fragment的使用方式
  • Fragment 生命周期和 Activity 对比
  • 什么是Fragment的回退栈?
  • Fragment重叠问题

......

5.Android 性能优化

  • 如何对Android应用进行性能分析
  • 什么状况下会致使内存泄露
  • 如何避免OOM异常
  • Android中如何捕获未捕获的异常
  • ANR是什么?怎样避免和解决ANR

......

面试题解析内容所有免费分享, 有须要完整版的小伙伴【点击我】免费获取哦!

6.Handler

  • Handler Looper Message 关系是什么?
  • Messagequeue 的数据结构是什么?为何要用这个数据结构?
  • Handler post 方法原理?
  • 如何在子线程中建立 Handler?

......

7.Flutter相关面试题

  • Flutter 是什么?
  • Flutter 特性有哪些?
  • Flutter 中的生命周期
  • PlatformView
  • Platform Channel
  • Flutter 和 Dart的关系是什么?
  • Widget 和 element 和 RenderObject 之间的关系?
  • mixin extends implement 之间的关系?
  • 使用mixins的条件是什么?

最后

面试是跳槽涨薪最直接有效的方式,如今能够开始准备明年春季的面试了,各位作好面试造飞机,工做拧螺丝的准备了吗?

掌握了这些知识点,面试时在候选人中又能够夺目很多,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让本身能够在候选人中脱颖而出。

如下是全部面试题资料截图:

面试题解析内容所有免费分享, 有须要完整版的小伙伴【点击我】免费获取哦!
相关文章
相关标签/搜索