Android面试知识点合集

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

1. 常用的布局有哪些?

  • FrameLayout,LinearLayout,RelativeLayout,AbsoluteLayout,GridLayout

  • CoordinatorLayout(协调),AppBarLayout,CollapsingToolbarLayout的一些相关属性

  • Android ConstraintLayout(约束)详解

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产生和原因

  • ANR,程序没有响应,有可能程序会再次响应
    例子:应用运行时,Main线程进行了耗时操作;应用运行时,用户操作过于频繁
    Force close:程序抛出异常,应用停止运行,会强制退出
    例子:应用运行时抛出了OutOfMemoryError,应用运行时抛出了RuntimeException
  • 可以通过Thread.UncaughtExceptionHandler捕获异常

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 教程

  • MPAndroidChart 教程:概述
  • MPAndroidChart 教程:开始 Getting Started(一)
  • MPAndroidChart 教程:与图表进行手势交互 Interaction with the Chart(二)
  • MPAndroidChart 教程:坐标轴,X轴,Y轴,Labels(三)
  • MPAndroidChart 教程:设置数据,设置颜色(四)
  • MPAndroidChart 教程:数据格式器 ValueFormatter(五)
  • MPAndroidChart 教程:图表的具体设置 Specific chart settings(六)
  • MPAndroidchart 教程:图例 Legend(七)
  • MPAndroidChart 教程:动态和实时数据 Dynamic & Realtime Data(八)
  • MPAndroidChart 教程:修改视窗 Modifying the Viewport(九)
  • MPAndroidChart 教程:动画 Animations(十)
  • MPAndroidChart 教程:MarkerView(十一)
  • MPAndroidChart 教程:ChartData类,ChartData子类, DataSet类,DataSet子类(十二)

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

参考文章

  • 近期Android面试经历总结
  • http://blog.csdn.net/itachi85/article/details/7426474

你可能感兴趣的:(Android面试知识点合集)