Android知识点总结

Android四大组件

  • Activity、BroadcastReceiver、ContentProvider、Service

四大组件生命周期方法和简单用法

  • Activity生命周期方法:
    onCreate()、onStart()、onResume、onPause()、onStop()、onDestroy()、onRestart()

    Activity的生命周期:Activity生命周期
    Activity的启动流程:Activity的启动流程

  • BroadcastReceiver生命周期方法:
    onReceive()

    BroadcastReceiver简单用法和工作过程:BroadcastReceiver 工作过程

  • ContentProvider方法:
    onCreate()、getType()、query()、insert()、delete()、update()。

    onCreate()会在ContentProvider创建时调用。其它需要ContentResolver的对应方法触发。

    ContentProvider用法:ContentProvider使用

  • Service生命周期方法:
    1、 startService 生命周期:
    onCreate -> onStartCommand -> onDestroy
    重复启动会执行onStartCommand

    2、bindService 生命周期:
    onCreate -> onBind -> onUnbind -> onDestroy
    重复绑定不会走生命周期方法

    Service的启动流程:Service启动流程Android Service使用

Activity之间的通信方式

  • Intent : 启动Activity的时候通过Intent传值,可以跨进程通信
  • BroadcastReceiver : 通过广播可以实现跨进程、实时、互相通信
  • Service : 通过bindService 的方式可以实现跨进程、实时、相互通信。
    缺点:比较复杂
  • 通过Application的全局变量、File、数据库、SharedPreference 可以实现Activity之间通信。缺点:不能实时通信。
  • EventBus 之类:实时,不能跨进程

Activity 各种情况下的生命周期

Activity与Fragment之间生命周期比较

  • 首先要知道Fragment 11个生命周期方法:

      onAttach、onCreate、onCreateView、onActivityCreated、onStart、onResume、
      onPause、 onStop、onDestroyView、onDestroy、onDetach
    
  • 在Activity中添加Fragment,Activity和Fragment完整生命周期如下:
    Activity: onCreate
    fragment: onAttach
    fragment: onCreate
    fragment: onCreateView
    fragment: onActivityCreated
    Activity: onStart
    fragment: onStart
    Activity: onResume
    fragment: onResume
    fragment: onPause
    Activity: onPause
    fragment: onStop
    Activity: onStop
    fragment: onDestroyView
    fragment: onDestroy
    fragment: onDetach
    Activity: onDestroy

两个Activity之间跳转时必然会执行的是哪几个方法?

  • A 必然会执行: onPause, 因为B如果是个透明主题的Activity,就不会执行onStop方法。
  • B 必然会执行:onStart、onResume, 因为如果B是SingleTask启动模式,并且已经在栈内存在,则不会再次创建。

前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,触发回调方法。

  • 前台切换到后台 : onPause、 onStop
  • 回到前台 :onRestart、onStart、onResume
  • 弹出Dialog时触发 :onWindowFocusChanged, 弹出hasFocus为false,消失hasFocus为true。

Activity的四种启动模式对比

  • Standard :默认启动模式,每次启动都会创建一个Activity实例
  • SingleTop :栈顶复用模式,当要启动的Activity位于栈顶时,则直接复用此Activity,不会创建新的Activity。并且触发onNewIntent方法。此过程声明周期方法:onPause、 onNewIntent、 onResume
  • SingleTask : 栈内复用模式,当要启动的Activity已经位于栈内,则不会重新创建,而是直接销毁位于该Activity栈上面的其他实例,使该Activity位于栈顶。该Activity声明周期为:onNewIntent、 onRestart、onStart、onResume
  • SingleInstance : 单实例模式,加强的SingleTask模式,除了具有SingleTask特点,系统还会为此模式的activity单独创建一个任务栈,使该activity单独位于一个任务栈中
    参考:activity启动模式

Activity状态保存于恢复

Activity状态恢复一般指横竖屏切换时(或者当内存不足时,被回收的后台Activity),Activity销毁与重建时数据的保存与恢复。

  • onSaveInstanceState : 在该方法中保存数据。在onStop之前调用
  • onRestoreInstanceState : 在该方法中恢复保存的数据。onStart之后调用

当Activity在manifest中设置configChanges属性时:android:configChanges="orientation",横竖屏切换Activity不会销毁重建,而是执行onConfigurationChanged方法

Fragment之间传递数据的方式?

  • 广播
  • 全局变量通过set、get方法传递
  • 本地存储
  • EventBus之类

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

  • 通过广播 : 优点:支持跨进行
  • 通过EventBus之类 : 缺点:不支持跨进程
  • 通过AIDL : 跨进程方案
  • bindService : 绑定时通过Intent传值给Service,绑定成功后在onServiceConnected中获得在onBind方法中返回的IBinder 实例,通过该IBinder实例调用Service中的方法。 可参考:Android Service使用

谈谈你对ContentProvider的理解

ContentProvider是应用程序间共享数据的接口,通过ContentProvider可以实现不同应用程序间的数据共享。

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

  • ContentProvider : 内容提供者。内部类Transport是一个Binder子类,并且实现IContentProvider接口,负责接收ContentResolver请求,并调用ContentProvider增删改查方法
  • ContentResolver : 内容解析者。通过authority属性,获得对应IContentProvider对象,调用IContentProvider增删改查方法,通过Binder机制,在ContentProvider 内部类Transport中接收。
  • ContentObserver : 内容观察者。通过getContentResolver().registerContentObserver(uri,notifyForDescendants,observer)注册观察者,当uri中内容发生变化时,会触发监听。

广播的分类

  • 普通广播 : sendBroadcast, 所有注册的广播都能收到
  • 有序广播 : sendOrderedBroadcast, 优先级高的先收到,并且有修改广播内容和决定是否继续下发给低优先级广播的权利

广播使用的方式和场景

  • 静态注册 : 在XML文件中注册。场景:需要时刻监听广播
  • 动态注册 : registerReceiver()。 场景:特定页面监听广播

本地广播和全局广播有什么差别?

  • 注册方式 : 本地广播只能通过LocalBroadcastManager进行注册、发送、解除注册等。LocalBroadcastManager.getInstance(this).registerReceiver()
  • 作用域 : 全局广播可以是应用内和应用之间使用,本地广播只能本应用内使用。

AlertDialog,PopupWindow,Activity区别

  • 级别不同 : Activity 是四大组件之一,而AlertDialog、PopupWindow都是依附在DecorView上的,即依附在Activity上。
  • 是否阻塞 : PopupWindow点击阴影背景弹框不能消失,除非调用dismiss方法,AlertDialog可以消失
  • 背景是否全屏 : PopupWindow 背景可以不是全屏显示,AlertDialog背景全屏显示

Application 和 Activity 的 Context 对象的区别

  • 继承关系:Activity -> ContextThemeWrapper -> ContextWrapper -> Context,
    Application -> ContextWrapper -> Context,

  • 声明周期长短 : Activity中的Context是当前页面的Context,Application的Context是整个应用的Context

Android属性动画特性

  • 可以对任意对象的属性执行动画操作
  • 真正改变View的本身属性(区别于补间动画只改变View的显示效果)

Android中数据存储方式

  • 使用SharedPreferences存储数据。/data/data/Package Name/Shared_Pref
  • 文件存储数据
  • SQLite数据库存储数据。 /data/data/Package Name/database
  • 使用ContentProvider存储数据
  • 网络存储数据

介绍下SurfView

SurfaceView 是 Android 中一种比较特殊的视图(View),它跟平时时候的 TextView、Button 最大的区别是它跟它的视图容器并不是在同一个视图层上,它的 UI 显示也可以不在一个独立的线程中完成,所以对 SurfaceView 的绘制并不会影响到主线程的运行。综合这些特点,SurfaceView 一般用来实现动态的或者比较复杂的图像还有动画的显示。

Android SurfaceView 源码分析及使用

Fragment懒加载

Fragment懒加载就是Fragment可见(并且已经执行onCreateView加载布局)后才进行数据加载。
可以通过setUserVisibleHint(boolean isVisibleToUser)(ViewPage中)或者onHiddenChanged(boolean hidden)(FragmentManager管理)方法来判断是否可见,进行数据加载。

Fragment嵌套Fragment,通过getChildFragmentManager(),让当前的Fragemnt去管理Fragment。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值