Android-基础
四夕口鸟
Coding赚点奶粉钱
展开
-
四大组件(1) - Activity
一.四大状态running - paused - stopped - killed备注:Running状态和Paused状态是可见的,Stopped状态和Killed状态时不可见的。二.七大生命周期 onCreate - onRestart - onStart - onResume - onPause - onStop - onDestory备注:以页面a跳到b为例...原创 2019-11-30 20:46:08 · 77 阅读 · 0 评论 -
基础组件(2) - Service
继承关系Context -> ContextWrapper -> Service 位于 android.app 包中一、生命周期 onCreate():首次创建服务时调用,该方法只调用一次。onStartCommand():当另一个组件通过调用startService()请求启动服务时,系统将调用此方法。onDestroy():当服务不再使用且将被销毁时,系统将调用...原创 2019-11-30 20:46:13 · 332 阅读 · 0 评论 -
四大组件(3) - BoradCast
一、广播类型(标准、有序、粘性、本地)1.标准广播是一种完全异步执行的广播,所有的广播接收器会在同一时间(理论上~)接收到,互相不能改变广播消息,无法终止广播传送。2.有序广播是一种同步执行的广播,优先级高的可以优先接收到,可改变广播消息,可终止广播传送3.粘性广播 (发出的消息确保能消费)4.本地广播 (只支持线程通信.Handler+订阅模式)二、注册方式(静态、...原创 2019-11-30 20:46:02 · 203 阅读 · 0 评论 -
四大组件(4) - ContentProvider
给其它应用分享本应用数据,常见使用场景:通讯录 短信等一、使用步骤1.提供数据App - 定义ContentProvider继承ContentProvider 复写相关初始化和查询方法同时在Manifest中声明<providerandroid:name=“xxx”android:authorities=“testProvider” //访问路径名称andro...原创 2019-11-30 20:47:09 · 67 阅读 · 0 评论 -
四大组件(5) - Fragment
由于Activity太“重” 不能动态注册、不能模块化,因此引入Fragment一、生命周期onAttach():Fragment和Activity相关联时调用。可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。onCreateView():创建Fragment的布局。onActivityCreated():当Activity完成onCreat...原创 2019-11-30 20:45:55 · 191 阅读 · 0 评论 -
本地存储(1) - File
Android 的存储分为三类:内存、内置|外置SD 卡,应用安装后,系统会根据应用的包名在内存创建一个/data/data/包名/的文件夹,默认私有的,用于存储一些简单的文本数据或者二进制数据.我们知道直接File file = new File(“info.txt”);会报文件找不到的异常,因为这样写会被创建到手机内部存储的根目录里面,但是内部存储根目录是只读不可写的。优化:Fil...原创 2019-11-30 20:47:05 · 389 阅读 · 0 评论 -
本地存储(2) - SP
SharedPreferences在内存/data/data/包名/shared_prefs目录下,以xml格式进行保存,适用于存储一些键值对,一般用来存储配置信息。一、优缺点1、与数据库相比,免去了创建数据库、表,写SQL语句等诸多操作,相对而言操作更加方便,快捷。2、只能存储五种简单的数据类型 (boolean float int long string)3、无法进行...原创 2019-11-30 20:46:58 · 490 阅读 · 0 评论 -
本地存储(3) - DB
一、原生SQLite优化措施:1.多线程读,单线程写,读写分离,各线程维护一个SQLiteOpenHelper。参考:https://blog.csdn.net/u010205141/article/details/441824612.使用索引和事务参考:https://blog.csdn.net/txvaqh/article/details/524129583.代码层面...原创 2019-11-30 20:46:53 · 99 阅读 · 0 评论 -
View(1) - 绘制原理
体系Activity -> phoneWindow ->DecorView -> 各ViewGroup等1.DecorView(FrameLayout)包含StateView、TitileView、ContentView 等子View ,setContentView 设置的是DecorView子View。2.Activity 托管 phoneWindow实例对象,ph...原创 2019-11-29 21:49:05 · 214 阅读 · 0 评论 -
View(2) - 事件分发
一、体系Activity -> phoneWindow ->DecorView -> 各ViewGroup等1.DecorView包含StateView、TitileView、ContentView 等子View ,setContentView 设置的是DecorView子View。2.Activity 托管 phonwWindow实例对象,phoneWindow管理...原创 2019-11-29 21:51:58 · 120 阅读 · 0 评论 -
View(3) - 手势
一、种类(常用的4种)1.OnGestureListener 标准手势2.OnDoubleTapListener 双击3.SimpleOnGestureListener 单击4.ScaleGestureDetector 简单的缩放,没有拖动 (类,用于继承)二、使用方法1.Activity或者View implements GestureDetector.OnGes...原创 2019-11-29 21:53:25 · 156 阅读 · 0 评论 -
View(4) - 自定义控件
一、实现方式1.继承View重写onDraw方法2.继承View、ViewGroup 派生特殊的View、Layout 例如:继承TextView 继承LinearLayout等等二、注意事项1.让View支持wrap_content2.让View支持padding3.尽量不要在View中使用Handler三、其它1、自定义View如何提供获取View...原创 2019-11-29 21:55:42 · 94 阅读 · 0 评论 -
View(5) - RecyclerView
一、优缺点对比1、rView继承的RecyclerView.Adapter ; ListView的Adapter继承的是BaseAdapter2、rView支持多种显示样式 LinearLayoutManager GridLayoutManager StraggeredGridLayoutManager3、rView有默认的方法onCreateViewHolder ->...原创 2019-11-30 20:45:39 · 82 阅读 · 0 评论 -
通信(1) - 应用线程通信
1. 数据 (共享内存变量、文件)2. Handler3. LocalBoradCast(单例 + 观察者模式 + Handler组成 原始BoradCast由于需要经由AMS多次跨进程BInder效率很低下) 具体参考 : https://www.jianshu.com/p/6f1ea19a17ed4. runOnUiThread方法 https://www.jianshu.com...原创 2019-11-29 21:41:38 · 54 阅读 · 0 评论 -
通信(2) - 应用进程通信
一、应用进程通信1、BoradCast2、AIDL3、ContentPrivder4、HermesEventBus https://blog.csdn.net/jdsjlzx/article/details/52279314以上都是基于binder机制二、linuxIPC方式1、管道(Pipe)及有名管道(named pipe)2、信号(Signal)...原创 2019-11-29 21:46:58 · 136 阅读 · 1 评论 -
通信(3) - 网络短连接
一、概述基础框架有HttpClient、HttpURLConnection、Okhttp3个 1. HttpClient是Apache 的一个三方网络框架,网络请求做了完善的封装 ,api众多,用起来比较方便,开发快。 android5.0被废弃,6.0删除。(被okHttp取代) 2. HttpURLConnection 一个多用途、轻量级的Http客户端。 HttpUr...原创 2019-11-29 21:47:18 · 428 阅读 · 0 评论 -
通信(4) - 网络长链接
1. 使用第三方的长连接服务这是最简单的方式,我们可以通过接入极光推送,百度推送,友盟等第三方服务实现长连接,通过接入第三方的API我们可以很方便的接入第三方的长连接,推送服务,但是这种方式定制化程度不太好,如果对长连接服务不是要求特别高,对定制化要求不是很高的话基本可以考虑这种方式(目前主流的App都是使用第三方的长连接服务)优势:简单,方便劣势:定制化程度不高2. 使用N...原创 2019-11-29 21:47:26 · 129 阅读 · 0 评论 -
适配(1) - 界面
一、适配原理1.分辨率320*480(分辨率) - 160(dpi) - 1.0 (density) - mdpi (drawable) - 48*48 (应用icon) - 320dp (宽)480*800 (分辨率) - 240(dpi) - 1.5(density) - hdpi (drawable) - 72 * 72 (应用icon) - 320dp (宽)720|7...原创 2019-11-27 09:45:07 · 207 阅读 · 0 评论 -
适配(2) - 系统
市场占有率分布:https://mta.qq.com/mta/data/device/os5.01. multiDexEnabled在.build文件设置multiDexEnabled = true (5.0+支持)继承MultiDexApplication or implements attachBaseContext (5.0以下系统)官方multidex适配:https:...原创 2019-11-27 09:46:30 · 180 阅读 · 0 评论 -
优化(1) - 界面
一、卡顿原因应用界面性能目标是保持 60 Fps,每一帧只有16 ms(1秒 / 60帧)的时间来处理任务。Android 5.0 版本里,Android 框架层引入了 “ Render Thread ” ,用于向 GPU 发送实际渲染的操作。这个线程减轻了一些UI线程减少的操作。但是输入、滚动和动画仍然在 UI thread,因为 Thread 必须能够响应操作。https://ww...原创 2019-11-27 09:10:01 · 86 阅读 · 0 评论 -
优化(2) - 内存
尽量少新建对象,共用对象,及时释放无用对象一、分类1、内存泄露 -> 由于某种原因导致gc无法及时回收对象。(持有引用者生命周期大于被引用者生命周期)2、内存抖动 -> 频繁创建大量临时的小对象。3、内存溢出 -> 超过应用最大使用内存上限,常见都由上述2种情况造成。二、内存泄露1、资源类。例如: 数据库 、广播监听、bitmap等2...原创 2019-11-27 09:13:13 · 81 阅读 · 0 评论 -
优化(3) - 网络
1、合理规范的接口设计在扩展性和接口请求次数之间寻找一个平衡,同时坚决避免传输无意义的字段2、gizp压缩 聊聊HTTP gzip压缩与常见的Android网络框架3、合理的序列化协议 JSON、Protobuf等JSON、Protobuf、Thrift、MessagePack:https://blog.51cto.com/13952501/21730384、内容缓存5、...原创 2019-11-27 09:19:55 · 113 阅读 · 0 评论 -
优化(4) - 电量
一、手机最耗电的地方1.唤醒屏幕2.CPU唤醒使用3.蜂窝煤比wifi费电二、电量检测工具1.因为电量统计数据是持续的, 会非常大, 统计我们的待测试App之前先reset下, 连上设备, 命令行执行:$ adb shell dumpsys batterystats --resetBattery stats reset2.断开测试设备, 操作我们的待测试App...原创 2019-11-27 09:20:38 · 125 阅读 · 0 评论 -
优化(5) - 包体积
一、包结构1、assets 资源文件2、res 资源文件3、*.dex Dalvik字节码4、META-INF 签名信息5、lib so库二、图片资源1.数量 -> 图片命名规范,方便维护图片 (去除无用图片) ,尽量共用图片2.大小 -> 简单图用xml或draw .9 都可,如不透明,尽量用jpg , 还可用webp、svg替代3.压缩 -...原创 2019-11-27 09:21:25 · 130 阅读 · 0 评论 -
安全(1) - 代码安全
一、分类1.混淆 (java文件)2.加固 (Dex文件)3.防止应用被调试4.防止应用被Hook操作5.防2次打包 - 签名校验防护策略二、混淆功能1.压缩(在打包的时候来检查并移除代码中没有用到的字段、方法、属性和类)2.优化(它可以对字节码进行优化,对.class文件里无用的操作移除)3.混淆(把有意的名词变成无意的名词)4.预检测(第二次进...原创 2019-11-27 09:47:40 · 275 阅读 · 0 评论 -
安全(2) - 本地数据
一、Shared PreferencesShared Preferences存储安全风险源于以下两方面:1.不要使用MODE_WORLD_WRITEABLE和MODE_WORLD_READABLE模式创建进程间通信的文件,此处即为Shared Preferences;2.尽量避免将密码等敏感数据明文存储在Shared Preferences中(Root后存在信息泄露的隐患)。3.尽...原创 2019-11-27 09:48:19 · 237 阅读 · 0 评论 -
安全(3) - 组件安全
1.LogCat安全风险 AndroidManifest.xml设置Android:debuggable=”false” //关掉日志输2.禁止adb备份应用数据 将AndroidMannifest.xml文件中的android:allowBackup属性值设为false 参考:https://blog.csdn.net/qq_31387043/artic...原创 2019-11-27 09:48:50 · 190 阅读 · 0 评论 -
安全(4) - 网络通信
一、Http和Https方式: 认证+加密http: 禁止将敏感数据明文传输 。(利用一定的加密策略加密)数据加密方式:https://www.jianshu.com/p/26adec49cb34https: 一定要对证书的有效性做校验。最好做到双向认证。单向、双向认证原理:https://blog.csdn.net/chenchuanhai04/article/deta...原创 2019-11-29 21:41:01 · 125 阅读 · 0 评论 -
NDK
一、JNI和NDK区别JNI:JNI是一套编程接口,用来实现Java代码与本地的C/C++代码进行交互;NDK: NDK是Google开发的一套开发和编译工具集,可以生成动态链接库,主要用于Android的JNI开发; (Android平台一个实现JNI功能的工具包)二、NDK优点1.安全 相对于java的半解释语言 c反编译破解汇编的难度更大2.高效 本地代码效率高 ...原创 2019-11-29 21:41:12 · 353 阅读 · 0 评论