美文网首页知识点温故
Android基础知识点

Android基础知识点

作者: Echopppppp | 来源:发表于2018-03-22 10:55 被阅读10次

最近考虑跳槽的小伙伴应该很多,我自己也在做一些知识点的整理,分享给大家~最新内容更新于github/oo1993448102

  • 四大组件是什么
    </br>均需注册使用

    • Activity

    • Service </br>
      startService:service生命周期与启动它的组件无关,需要显示销毁

      bindService:生命周期与调用者绑定

    • ContentProvider
      </br>跨应用数据共享 IPC的一种

    • BroadcastReceiver
      </br>静态注册+动态注册(register+unregister)

  • 四大组件的生命周期和简单用法
    </br>Activity:

       protected void onCreate(Bundle savedInstanceState);  
         
       protected void onStart();     
         
       protected void onRestart();  
         
       protected void onResume();  
         
       protected void onPause();  
         
       protected void onStop();  
         
       protected void onDestroy();  
       
    

    Service:</br>
    startService():

    image
    stopService():
    image
    bindService():
    image
    unbindService():
    image
    startService()+bindService():
    image

    ContentProvider:</br>
    ContentProvider只有一个onCreate()生命周期方法且只会被调用一次,当其他应用通过ContentResolver第一次访问该ContentProvider时,onCreate()方法将会被回调

    BroadcastReceiver:</br>
    动态注册与注册的context同周期</br>
    静态注册 onReceive()后被注销

  • Activity之间的通信方式

    • Intent
    • SharedPreference\写入本地文件
    • SQLite 各种orm
    • 静态变量
    • ......
  • Activity各种情况下的生命周期
    https://www.jianshu.com/p/e46d449467d5

  • 横竖屏切换的时候,Activity 各种情况下的生命周期
    </br>1.不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期默认首先销毁 当前 activity,然后重新加载。

    2.设置 Activity android:configChanges="orientation|keyboardHidden|screenSize"时,切 屏不会重新调用各个生命周期,只会执行 onConfigurationChanged 方法。直接设置屏幕方向可以免去这个问题。

  • Activity与Fragment之间生命周期比较</br>


  • Activity上有Dialog的时候按Home键时的生命周期
    </br> 按Home:onPause() onStop()
    </br>返回App:onRestart() onStart() onResume()
    </br>dialog出现与否不影响生命周期 尝试时使用的是AlertDialog

  • 两个Activity 之间跳转时必然会执行的是哪几个方法?
    </br>A跳转B:A的onPause() 若A不可见 onStop()
    </br> B的onCreate(),onStart(),onResume()

  • 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法
    </br> 按Home:onPause() onStop()
    </br>返回App:onRestart() onStart() onResume()
    </br>dialog出现与否不影响生命周期 尝试时使用的是AlertDialog

  • Activity的四种启动模式对比

    • standard 标准模式,每次都新建一个实例对象
    • singleTop 如果在任务栈顶发现了相同的实例则重用,且调用原来实例的onNewIntent()方法,否则新建并压入栈顶
    • singleTask 如果在任务栈中发现了相同的实例,将其上面的任务终止并移除,重用该实例,且调用原来实例的onNewIntent()方法。否则新建实例并入栈
    • singleInstance 在新任务栈中开启,许不同应用,进程线程等共用一个实例,无论从何应用调用该实例都重用,且调用原来实例的onNewIntent()方法
  • Activity状态保存与恢复
    </br>onSaveInstanceState():

    • 屏幕旋转重建会调用onSaveInstanceState()
    • 启动另一个activity当前activity在离开前会调用onSaveInstanceState()
    • 按Home键的情形和启动另一个activity一样, 当前activity在离开前会onSaveInstanceState()

    onRestoreInstanceState():

    • 屏幕旋转重建会调用onRestoreInstanceState()
    • 启动另一个activity,返回时如果因为被系统杀死需要重建, 则会从onCreate()重新开始生命周期, 调用onRestoreInstanceState()
    • 按Home键的情形和启动另一个activity一样,用户再次点击应用图标返回时, 如果重建发生, 则会调用onCreate()和onRestoreInstanceState()

    屏幕旋转:</br>


    image
    image

    </br>Home:


    image
  • Fragment各种情况下的生命周期
    </br>hide show: onHiddenChanged()
    </br>viewpager: setUserVisibleHint()

  • Fragment之间传递数据的方式?

    • 拿到fragment对象,直接传参
    • 接口回调
    • 事件分发
    • ......
  • Activity 怎么和Service 绑定?
    </br>bindService 方法启动服务, 其它组件可以通过回调获取服务的代理对象和服务交互, 而这两方也进行了绑定, 当启动方销毁时, 服务也会自动进行 unBind 操作, 当发现所有绑定都进行了 unBind 时才会销毁服务.

  • 怎么在Activity中启动自己对应的Service?
    </br>在 Activity 中可以通过 startService 和 bindService 方法启动 Service。

  • service和activity怎么进行数据交互?

    • bindService 通过Binder得到Service对象
    • 广播
    • ......
  • Service的开启方式
    </br>startService && bindService

  • 请描述一下Service 的生命周期

    image
  • 谈谈你对ContentProvider的理解
    </br>ContentProvider一般为存储和获取数据提供统一的接口,提供了对底层数据存储方式的抽象,可以在不同的应用程序之间共享数据。

  • 说说ContentProvider、ContentResolver、ContentObserver 之间的关系

    • ContentProvider:应用提供
    • ContentResolver:统一管理与不同ContentProvider间的操作,通过统一ContentResolver访问不同ContentProvider
    • ContentObserver 内容监听器, 可以监听数据的改变状态
  • 请描述一下广播BroadcastReceiver的理解

  • 广播的分类
    </br>广播接受器,通过action进行匹配,任意一个action匹配则成功。一个广播接收器可以接收多个广播发出者发出的广播,一个广播发出者也可以得到多个广播接收器的回应。
    </br>动态注册,多次注册同一个广播只有一个实例,必须显示unregister
    </br>静态注册,onReceive后会自己注销,所以每次接收时自动生成一个新的实例
    </br>广播底层由Binder实现

  • 广播使用的方式和场景
    </br>广播的发送者和接收者事先是不需要知道对方的存在的,这样带来的好处便是,系统的各个组件可以松耦合地组织在一起
    </br>监听系统广播 (区别EventBus)
    </br>进程间通信 (区别EventBus)

  • 本地广播和全局广播有什么差别?
    </br>Broadcast是针对应用间、应用与系统间、应用内部进行通信的一种方式 广播底层Binder
    </br>LocalBroadcast比较轻量,由handler实现,仅在自己的应用内发送接收广播,也就是只有自己的应用能收到,数据更加安全广播只在这个程序里,而且效率更高。

  • BroadcastReceiver,LocalBroadcastReceiver 区别
    </br>LocalBroadcastReceiver不能静态注册,只能采用动态注册的方式。
    在发送和注册的时候采用,LocalBroadcastManager的sendBroadcast方法和registerReceiver方法

  • AlertDialog,popupWindow,DialogFragment区别
    </br>AlertDialog是非阻塞线程的,Popupwindow是阻塞线程的。
    </br> DialogFragment fragmentManager会自动管理DialogFragment的生命周期.

  • Application 和 Activity 的 Context 对象的区别
    </br>生命周期长短,使用Activity的Context持有某些静态引用会引起内存泄漏

    image

数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。

数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用。

数字3:在receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值。(可以无视)

  • Android属性动画特性
    </br>与视图动画相对,3.0 API11后出现,可用于任何对象上,在改变视图的同时改变属性,为了兼容可使用开源库

    ValueAnimator
    </br>ObjectAnimator

  • 如何导入外部数据库?
    http://blog.csdn.net/jing__jie/article/details/51602587

  • LinearLayout、RelativeLayout、FrameLayout的特性及对比,并介绍使用场景

    • FrameLayout: 没有过多的测量 所有子view默认排放左上角
    • LinearLayout:线性布局,支持weight,会测量两次
    • RelativeLayout:相对布局,两次测量
      </br>没有嵌套的情况下,LinearLayout,FrameLayout性能优于RelativeLayout,RelativeLayout的功能比较复杂,它的布局过程需要花费更多的CPU时间

    布局调优工具

    • hierarchy viewer
    • lint
    • Android Device Monitor (左上方截图功能的右边,dump)
  • 谈谈对接口与回调的理解
    </br>可以用于实现观察者模式、事件监听

  • 介绍下SurfaceView

    1 . View适用于主动更新的情况,而SurfaceView则适用于被动更新的情况,比如频繁刷新界面。

    2 . View在主线程中对页面进行刷新,而SurfaceView则开启一个子线程来对页面进行刷新。

    3 . View在绘图时没有实现双缓冲机制,SurfaceView在底层机制中就实现了双缓冲机制。(双缓冲技术是游戏开发中的一个重要的技术。当一个动画争先显示时,程序又在改变它,前面还没有显示完,程序又请求重新绘制,这样屏幕就会不停地闪烁。而双缓冲技术是把要处理的图片在内存中处理好之后,再将其显示在屏幕上。双缓冲主要是为了解决 反复局部刷屏带来的闪烁。把要画的东西先画到一个内存区域里,然后整体的一次性画出来。)
    SurfaceView 详解

  • RecyclerView的使用
    </br>略

  • 序列化的作用,以及Android两种序列化的区别
    </br>序列化:对象 --> 字节流 反序列化:字节流-->对象

    • Serializable Java 序列化接口 IO读写存储在硬盘上 利于数据持久化
    • Parcelable Android 序列化接口 效率高 在内存中读写 使用麻烦 (AS有相关插件 一键生成所需方法)
      image
  • 差值器(TimeInterpolator) 估值器(TypeEvaluator)
    </br>属性动画中使用 用于实现非线性动画
    </br> TimeInterpolator:根据时间流逝的百分比计算出当前属性值改变的百分比。
    </br> TypeEvaluator:根据当前属性改变的百分比来计算改变后的属性值。
    </br>具体可参考扔物线的教程

  • Android中数据存储方式
    </br>SOLite SharedPreferences

相关文章

网友评论

本文标题:Android基础知识点

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