美文网首页Android面试相关
📒 Android学习笔记

📒 Android学习笔记

作者: DreamWinter | 来源:发表于2018-09-05 22:49 被阅读1次

    冥冥之中感觉今天会收到阿里电面。艾玛,没来,真是太好了,不过照时间推算,也没几天了,整理一波学习笔记。

    前几次面试表现得有点糟糕,各家面试官问的问题都不一样,真是防不胜防。我以为么,一般就问问四大组件、生命周期、一两个设计模式、HashMap、RxJava操作符、并发问题,然后扯扯做过的项目,就差不多了。结果么,Handler机制、Window、TextureView、Android虚拟机、Thread方法、线程池、class加载流程、jvm内存模型…都扯出来了。艾玛,瞬间感觉自己简历写得太泛。

    那就开始吧。

    Android:

    Android四大组件:Activity、Service、ContentProvider、BroadcastReceiver。

    Activity生命周期:onCreate()创建, onStart()可见, onResume()位于前台, onPause()暂停, onStop()停止, onDestroy()销毁. 这是常规的生命周期,从创建到销毁。
    从一个Activity跳转到另一个Activity再返回到当前Activity(等同于home键到桌面再返回当前activity):-> onPause(), onStop() -> onRestart()回到当前activity必然会调用, onStart(), onResume()。
    在当前Activity弹窗再消失弹窗:-> onPause(), onResume()。

    Activity启动模式:standard, singleTop, singleTask, singleInstance.
    standard:标准模式,在当前任务栈新增一个Activity实例(若无当前任务栈,那么必须在Intent里加上FLAG_ACTIVITY_NEW_TASK标记位)。
    singleTop:栈顶复用模式,若当前Activity已位于当前任务栈栈顶,那么该Activity不会被重复创建,其onNewIntent()方法将被调用。
    singleTask:栈内复用模式,若该Activity已位于当前任务栈,则将该Activity推到栈顶(在其之上的Activity会被移除),其onNewIntent()方法将被调用。
    singleInstance():单实例模式,该Activity独占一个任务栈,只要存在就不会新建。

    Fragment:Fragment可以理解为一个特定的View,其生命周期与Activity关联。

    Fragment生命周期:onAttach(), onCreate(), onCreateView(), onActivityCreated(), onStart(), onResume(), onPause(), onStop(), onDestroyView(), onDestroy(), onDetach()。其生命周期和Activity生命周期类似,也是首位对应,互为一组。此外onViewCreated()位于onCreatedView()与onActivityCreated()之间。

    ViewPager与Fragment:二者常常一起使用,需要注意的是,如果当前Fragment的父容器也是Fragment,那么需用调用getChildFragmentManager()方法来获取FragmentManager;
    此外,FragmentPagerAdapter管理的Fragment在页面移出缓存时不会调用Fragment的onDestroy()方法,只会调用onDestroyView()方法,这一点在ViewPager数据复用时很有用。FragmentStatePagerAdapter不同,它会连同Fragment一起移除,所以会触发Fragment的onDestroy()方法。

    啊,缓一口气。真多啊,这才大概讲了Activity和Fragment。感觉Android部分至少还有三个这么多,Java相关的至少还有两个这么多,真是高估了我想一个咖啡的时间写完。

    Service:

    这玩意是用的真的少,我一直把它理解为一个后台Activity,一个可以在应用页面退出后长存的服务。

    Service的两种启动方式:1. context.startService(intent);2. context.bindService(intent, …)。对了,这里提一下,通过context.start…启动一个Activity或者Service是跨应用的,会调用AMS的方法来唤起指定的东东,这也是为什么四大组件需要在Manifest里注册的原因(不然AMS咋知道有你?)。此外,第一种启动方式需要自己管理Service生命周期;第二种通过绑定的方式,Service会和调用者共存亡。

    IntentService:适合在后台处理耗时操作(比如上传或下载大文件)。
    相比Service:Service默认是不会新开线程的,IntentService相当于把这些事做了,不需要我们手动管理线程,而且任务执行完后会自动结束。
    相比线程:毕竟继承自Service,属于四大组件,拥有较顽强的生命力;而线程在应用位于后台后可能被中断。

    AsyncTask:既然聊到IntentService,那么再聊聊AsyncTask。AsyncTask适合短暂的异步操作(比如数据打点)。
    特性:AsyncTask提供了非常方便的异步操作与结果回调,多个AsyncTask会在同一个线程串行执行(所以不适合长任务,同时也不需要担心线程过多而拥堵)。

    ContentProvider:

    这玩意是见得多,用得少。在项目targetApi设置为27以上后,各种兼容需要用到ContentProvider,譬如拍照获取图片、Glide的缓存路径自定义。此外,通过ContentProvider来获取媒体资源可谓非常高效,写过个demo,广度遍历本地所有.mp3文件,耗时50秒,用网易云耗时15秒(估计做了多线程优化),用ContentProvider直接拿来就行(耗时0.01秒)。

    <coffee1 end 2018/09/05 22:48>

    相关文章

      网友评论

        本文标题:📒 Android学习笔记

        本文链接:https://www.haomeiwen.com/subject/nwozwftx.html