美文网首页
Android面试知识点合集

Android面试知识点合集

作者: 清霜辰 | 来源:发表于2017-11-10 19:31 被阅读0次

    本文均为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的加固(加壳)原理解析和实现

    参考文章

    相关文章

      网友评论

          本文标题:Android面试知识点合集

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