Android面试知识点合集

本文均为Android常用知识点,搜集整理以供复习参考
Java知识点总结,请点我

1. 常用的布局有哪些?

2. 内存泄漏的检测、几种常见场景及解决方法

场景一:静态变量持有了Activity
场景二:匿名内部类或非静态内部类引起的内存泄漏
场景三:Handler.sendMessageDelayed
场景四:Static Views
场景五:无限循环的属性动画

adb shelldumpsys meminfo (pid name) 查看activities数目
排查内存泄漏最简单和直观的方法
Android Studio-->monitor memory -->dump java head--> *.hprof

3. 使用TraceView来进行性能调优

Android Studio-->monitor --->CPU -->start method trace-->*.trace
Android 性能优化:使用 TraceView 找到卡顿的元凶

4. MVC/MVP/MVVM应用架构设计

Android中MVP设计使用(与MVC区别)

如何构建Android MVVM应用程序(Databinding)
1 ViewModel与View的协作
2 ViewModel与Model的协作
3 ViewModel与ViewModel的协作

https://developer.android.com/topic/libraries/data-binding/index.html

5. SurfaceView TextureView View区别

SurfaceView与View的区别和使用场景
SurfaceView和TextureView区别分析

6. Android activity的生命周期

1 启动时 onCreate onStart onResume
2 后台运行时 onPause onStop
3 外接电话时 onPuase onStop
4 关闭时 onPause onStop onDestory
5 下拉状态栏时 不执行生命周期方法

7. Activity&Fragment生命周期解析

Fragment生命周期解析

8. Activity 定义启动模式

standard、singleTop、singleTask、singleInstance and FLAG_ACTIVITY_NEW_TASK

9. Android View重绘和更新: invalidate和requestLayout

View绘制分三个步骤,顺序是:onMeasure,onLayout,onDraw。
调用invalidate方法只会执行onDraw方法;
调用requestLayout方法只会执行onMeasure方法和onLayout方法,并不会执行onDraw方法。
invalidate方法只能用于UI线程中,在非UI线程中,可直接使用postInvalidate方法,这样就省去使用handler的烦恼。

10. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面

Intent intent =newIntent(); 
intent.setAction("android.intent.action.VIEW"); 
Uri content_url =Uri.parse("http://www.163.com"); 
intent.setData(content_url); 
//指定浏览器的包名类名
intent.setClassName("com.android.browser","com.android.browser.BrowserActivity"); 
startActivity(intent);

11. ANR和Force close产生和原因

12. Android 横竖屏切换(onSaveInstanceState()/onRestoreInstanceState())

  • Android 3.2 (API 级别 13)以前
  1. 不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
  2. 设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。
  3. 设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
  • 从 Android 3.2 (API级别 13)开始
  1. 不设置Activity的android:configChanges,或设置Activity的android:configChanges="orientation",或设置Activity的android:configChanges="orientation|keyboardHidden",切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行一次。
  2. 配置 android:configChanges="orientation|keyboardHidden|screenSize",才不会销毁 activity,且只调用 onConfigurationChanged方法。

13. Android的系统架构

Android的系统架构

14. JVM、DVM(Dalvik VM)和ART虚拟机对比

http://blog.csdn.net/evan_man/article/details/52414390

15. [Android中AIDL的使用详解]

(http://www.jianshu.com/p/d1fac6ccee98)
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString);

16. Android进程间通信的几种方式

  1. Bundle/Intent传递数据
  2. Messenger是基于AIDL实现的,服务端(被动方)提供一个Service来处理客户端(主动方)连接,维护一个Handler来创建Messenger,在onBind时返回Messenger的binder。双方用Messenger来发送数据,用Handler来处理数据。示例
  3. AIDL通过定义服务端暴露的接口,以提供给客户端来调用示例
  4. ContentProvider底层也是Binder实现,主要用来为其他APP提供数据[Android 总结:ContentProvider 的使用]
  5. 在服务器中定义ServerSocket来监听端口,客户端使用Socket来请求端口,连通后就可以进行通信.

17. Android:Touch事件分发机制

  1. dispatchTouchEvent方法只负责事件的分发,当返回为true时,顺序下发会中断。
  2. 当某个View或者ViewGroup的onTouchEvent事件返回true时,便表示它是真正要处理这次请求的View,之后的Aciton_UP和Action_MOVE将由它处理。
  3. onInterceptTouchEvent有两个作用:1.拦截Down事件的分发。2.中止Up和Move事件向目标View传递,使得目标View所在的ViewGroup捕获Up和Move事件。

18. Activity布局加载流程

  • Activity的展示界面的特性是通过Window对象来控制的;

  • 每个Activity对象都对应这个一个Window对象,并且Window对象的初始化在启动Activity的时候完成,在执行Activity的onCreate方法之前;

  • 每个Window对象内部都存在一个FrameLayout类型的mDector对象,它是Acitivty界面的root view;

  • Activity中的window对象的实例是PhoneWindow对象,PhoneWindow对象中的几个成员变量mDector,mContentRoot,mContentParent都是View组件,它们的关系是:mDector –> mContentRoot –> mContentParent –> 自定义layoutView

  • LayoutInflater.inflate主要用于将布局文件加载到内存View组件中,也可以设定加载到某一个父组件中;

  • 典型的Activity的onCreate方法中需要调用super.onCreate方法和setContentView方法,若不调用super.onCreate方法,执行启动该Activity的逻辑会报错,若不执行setContentView的方法,该Activity只会显示一个空页面。
    其他相关流程:

  • Android 中的Activity、Window、View之间的关系

  • 应用进程启动流程

  • ActivityThread的主要工作及实现机制

  • 应用进程Context创建流程

  • Activity启动流程

19. LruCache缓存类

  • LruCache,内部使用Map保存内存级别的缓存
  • LruCache使用泛型可以设配各种类型
  • LruCache使用了Lru算法保存数据(最短最少使用least recent use)
  • LruCache只用使用put和get方法压入数据和取出数据

20. Android Context 是什么?

Context继承关系图
  • Context类是一个抽象类,具体实现在ContextImpl类中;而ContextWrapper是Context的一个包装类(装饰器模式),其里面所有的方法实现都是调用其内部mBase变量的方法,而mBase就是ContextImpl对象
  • ContextThemeWrapper中扩展了主题相关的方法。Application和Service是继承自ContextWrapper,而Activity是继承自ContextThemeWrapper(Activity在启动的时候系统都会加载一个主题)

21. Java开发中的23种设计模式详解

  • Application 单例模式
  • Broadcast 观察者模式
  • Class.forName 工厂模式
  • ContextWrapper 装饰器模式
  • ListView 的Adapter 适配器模式
  • new AlertDialog.Builder(this)属于(建造者)Builder模式

22. AsyncTask 详解

  1. 由于Handler需要和主线程交互,而Handler又是内置于AsyncTask中,所有AsyncTask的创建必须在主线程。
  2. AsyncTaskResult的doInBackground(Params)方法执行异步任务运行在子线程中,其他方法运行在主线程中,可以操作UI组件。
  3. 不要手动的去调用AsyncTask的onPreExecute, doInBackground, publishProgress, onProgressUpdate, onPostExecute方法,这些都是由android系统自动调用的。
  4. 一个AsyncTask任务只能被执行一次。
  5. 运行中可以随时调用cancel(boolean)方法取消任务,如果成功调用isCancel()会返回true,并不会执行onPostExecute(),取而代之的是调用onCancelled()。从源码看,如果这个任务已经执行了这个时候调用cancel是不会真正的把task结束,而是继续执行,只不过改变的是执行之后的回调方法的onPostExecute还是onCancelled.

23. 浅谈PopupWindow在Android开发中的使用

  • 为什么setOutsideTouchable(false)点击外部区域还是会关闭窗口,需要重写setContentView(),重写setOutsideTouchable():

23. Android 反射机制的理解

Class<?> cls=Class.forName("test.Person");//加载Person类
Object object=(Object) cls.newInstance();//实例化Person
Method setname=cls.getDeclaredMethod("setName", String.class);//获取setName()方法
setname.invoke(object, "Lipt0n");//设置调用setName的对象和传入setName的值
Method getname=cls.getDeclaredMethod("getName");//获取getName方法
System.out.print(getname.invoke(object, null));//设置调用getName方法的对象.把值打印到控制台
  1. Android开发:XML简介及DOM、SAX、PULL解析对比
  1. Broadcast 详解
  • 应用无法接受广播,如果想通过广播调用未启动过的App,自Android3.1开始,需要加上
    intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    系统默认添加的是:
    intent.addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);
  • 注册/取消注册应用内广播接收器
localBroadcastManager = LocalBroadcastManager.getInstance(context);
localBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);

//取消注册应用内广播接收器
 localBroadcastManager.unregisterReceiver(mBroadcastReceiver);

26. Android 动画总结

  1. 序列帧动画:关键词animation-listAnimationDrawable
  2. 补间动画
  • xml实现
Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.alpha_anim);
view.startAnimation(animation);
  • Java Code 实现
animation = new RotateAnimation(-deValue, deValue, Animation.RELATIVE_TO_SELF,
                pxValue, Animation.RELATIVE_TO_SELF, pyValue);
view.startAnimation(animation);
  1. 属性动画
ObjectAnimator anim = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f);
        anim.setDuration(1000);
        anim.start();
  • ObjectAnimator 这个类,这个类继承自ValueAnimator
  • 属性动画才是真正的实现了view的移动,补间动画对view的移动更像是在不同地方绘制了一个影子,实际的对象还是处于原来的地方
  • 属性动画会导致Activity无法释放而导致内存泄漏,而补间动画却没有问题

27. ...

28. 图片加载框架

Universal-Image-Loader完全解析(一)--- 基本介绍及使用
Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
Universal-Image-Loader完全解析(三)---源代码解读

29. H5 App开发 WeX5

WeX5文档中心

30. 数据库安全

WCDB(https://github.com/Tencent/wcdb)是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android。

31. 曲线图 MPAndroidChart 教程

32. Android中的Apk的加固(加壳)原理解析和实现

参考文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268