天天看点

android finish后不能ondestroy_Android面试基础(一)

android finish后不能ondestroy_Android面试基础(一)

一.四大组件是什么

Android 四大组件是Activity、Service、BroadcastReceive、ContentProvider

Activity

直接与用户交互的组件

周期:onCreate=>onStart=>onResume=>onPaused=>onStop=>onDestroy

启动模式: standard、singleTop、singleTask、singleInstance

1. 横竖屏切换生命周期不重启 设置android:configChanges

2.数据恢复

onSaveInstanceState-->onStop-->

onStart-->onRestoreInstanceState-->

Service

服务是运行在后台的组件,无需与用户进行交互

启动方式:

1.StartService: onCreate=>onStartCommand=>onDestroy

启动它的组件无关联,销毁需调用stopSelf或stopService

2.bindService: onCreate=>onBind=>onUnbind=>onDestroy

与启动组件绑定,所有绑定组件销毁后执行完unBind才会销毁

注:它本身还运行在主线程中,所以耗时逻辑仍需工作线程去完成

BroadcastReceive

广播用来在应用程序之间传播信息的机制

动态注册:registerReceive 注册组件销毁后,广播失效 unRegisterReceiver解除

静态注册:manifest中注册 安装时就会被系统解析一直起作用

普通广播

通过Context.sendBroadcast()方法来发送。它是完全异步的,所有的receivers接收器的执行顺序不确定 这种方式效率更高

有序广播

通过Context.sendOrderedBroadcast来发送。所有的receiver依次执行,使用android:priority属性设置优先级,优先级高的先收到该广播并且可以丢弃该广播,使该广播不再往下发送

ContentProvider

为应用提供数据共享,不用关注储存方式

ContentProvider(内容提供者)

ContentResolver(内容解析者)

ContentObserver(内容观察者)

1、创建自己的数据列表;

2、自定义ContentProvider实现相关的抽象方法;

3、在AndroidManifest中声明provider以及定义相关访问权限;

4 、通过ContentResolver根据URI进行增删改查;

二.Activity之间的通信方式

1.Intent 2.借助静态数据实现 3.借助全局变量来实现/Application 4.通过Service 5.借助外部存储

a.SharedPreference SharedPreference是存放在data/data/应用包名/shared_prefs目录下后缀为.xml的文件

b.SQLite SQLite是存放在data/data/应用包名/databases目录下的后缀为.db3的文件

c.File

三.Activity各种情况下的生命周期

正常

正常启动: onCreate=>onStart=>onResume

返回键退出:onPause=>onStop=>onDestroy

按home键

正常启动: onCreate=>onStart=>onResume

按home: onPause=>onStop

正常启动: onRestart=>onStart=>onResume

横竖屏切换

正常启动: onCreate=>onStart=>onResume

横竖屏切换:onPause=>onStop=>onDestroy=>onCreate=>onStart=>onResume

设置configChanges

正常启动: onCreate=>onStart=>onResume

横竖屏切换:onConfigurationChanged