Android应用开发基本知识点汇总
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android应用开发基本知识点汇总
Activity
一生命周期
4种状态 running / paused / stopped / killed
生命周期
Activity启动 onCreate -> onStart -> onResume
点Home返回主界面 onPause -> onStop
再次回到原Activity onRestart -> onStart -> onResume
退出Activity onPause -> onStop -> onDestroy
进程优先级前台/可见/服务/后台/空
二任务栈
三启动模式
standard
singleTop 栈顶复用
singleTask 栈内复用
singeInstance
四scheme跳转协议
服务器可以定制化告诉App跳转哪个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面
Fragment
一第五大组件
为什么是第五大组件 Fragment相对Activity更节省内存,切换更舒适Fragment加载到Activity的两种方式
静态加载xml
动态加载fragmentTransaction.add(id, fragment, “name”); .commit; FragmentPagerAdapter与FragmentStatePagerAdapter
FragmentStatePagerAdapter在切换时回收内存,适合页面较多的情况FragmentPagerAdapter并没有回收内存,只是detach了Activity
二生命周期
onAttach -> onCreate -> onCreateView -> onViewCreated -> onActivityCreated -> onStart -> onResume
-> onPause -> onStop -> onDestroyView -> onDestroy -> onDetach
先创建Activity后创建Fragment,先销毁Fragment后销毁Activity
三Fragment之间的通信
Fragment调用Activity getActivity
Activity调用Fragment 接口回调
Fragment调用Fragment方法findFragmentById
四FragmentManager
replace
add
remove
Service
一应用场景,与Thread区别
Service是什么后台长时间运行,没有用户界面,运行在主线程,不能有耗时操作
Service与Thread区别 Activity难以与Thread交互,尤其当Activity销毁以后
二开启Service的两种方式
StartService
onCreate -> onStartCommand -> onBind -> onDestroy
onStartCommand return START_STICKY;
startService(intent); stopService(intent);
BindService
Broadcast
一广播
定义
场景可在同一个App多个进程间消息传递,可在不同App间消息传递
种类 Normal, System有序广播, Local本地广播
二实现方式
静态注册注册完一直运行
动态注册跟随Activity生命周期
三实现机制
四本地广播 LocalBroadcastManager
由于之前的广播都是全局的,所有应用程序都可以接收到,这样就很容易会引起安全性的问题,比如说我们发送一些携带关键性数据的广播有可能被其他的应用程序截获,或者其他的程序不停地向我们的广播接收器里发送各种垃圾广播。
为了能够简单地解决广播的安全性问题,Android引入了一套本地广播机制,使用这个机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自应用程序发出的广播,这样所有的安全性问题就都不存在了。
异步消息处理
Handler
子线程发送消息,让主线程更新UI
handler使用方法post(runnable)与sendMessage(message)
handler内存泄漏解决办法:1. handler改为静态内部类 2.handler内部持有Activity外部弱引用
3. mHandler.removeCallback()
HandlerThread
多次创建销毁线程很耗费系统资源
本质上是线程, 继承自Thread,同时自己内部拥有Looper对象,可以进行Looper 循环
串行队列,不能同时多任务处理,需要等待
handlerThread = handler + thread + looper
AsyncTask
本质上封装了线程池和Handler
传入三个参数xxxAsyncTask extends AsyncTask
onPreExecute 在UI线程里执行
doInBackground 返回参数传给onPostExecute,中间publishProgress(i)中的参数传给onProgressUpdate
onProgressUpdate 在UI线程里执行
onPostExecute 在UI线程里执行
xxxAsyncTask.cancel()
并行or串行?为了线程池稳定,系统默认串行,一般建议串行,用xxxAsyncTask.executeOnExecutor执行并行
IntentService
IntentService是串行的
onHandleIntent 执行耗时操作
IntentService内部封装了HandlerThread框架,利用HandlerThread进行异步消息传递
WebView