网上高级工程师面试相干文章泥沙俱下,要么一堆内容,要么内容品质太浅,鉴于此我整顿了如下安卓开发高级工程师面试题以及答案帮忙大家顺利进阶,上面进入正题:
一、Android 相干
1.Activity
1.1 生命周期
- Activity A 启动另一个 Activity B,回调如下:
Activity A 的 onPause() → Activity B 的 onCreate() → onStart() → onResume() → Activity A 的 onStop();如果 B 是通明主题又或则是个 DialogActivity,则不会回调 A 的 onStop;
- 应用 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 从新回到前台后,所有的扭转都会失去保留。
然而当零碎内存不足时,调用 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 点。机会都是留给有筹备的人,只有短缺的筹备,才可能让本人能够在候选人中怀才不遇。
以下是所有面试题材料截图:
面试题解析内容全副收费分享,有须要完整版的小伙伴【点击我】收费获取哦!