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 · 151 阅读 · 0 评论 -
基础组件(2) - Service
继承关系 Context -> ContextWrapper -> Service 位于 android.app 包中 一、生命周期 onCreate():首次创建服务时调用,该方法只调用一次。 onStartCommand():当另一个组件通过调用startService()请求启动服务时,系统将调用此方法。 onDestroy():当服务不再使用且将被销毁时,系统将调用...原创 2019-11-30 20:46:13 · 436 阅读 · 0 评论 -
四大组件(3) - BoradCast
一、广播类型(标准、有序、粘性、本地) 1.标准广播是一种完全异步执行的广播,所有的广播接收器会在同一时间(理论上~)接收到,互相不能改变广播消息,无法终止广播传送。 2.有序广播是一种同步执行的广播,优先级高的可以优先接收到,可改变广播消息,可终止广播传送 3.粘性广播 (发出的消息确保能消费) 4.本地广播 (只支持线程通信.Handler+订阅模式) 二、注册方式(静态、...原创 2019-11-30 20:46:02 · 334 阅读 · 0 评论 -
四大组件(4) - ContentProvider
给其它应用分享本应用数据,常见使用场景:通讯录 短信等 一、使用步骤 1.提供数据App - 定义ContentProvider 继承ContentProvider 复写相关初始化和查询方法 同时在Manifest中声明 <provider android:name=“xxx” android:authorities=“testProvider” //访问路径名称 andro...原创 2019-11-30 20:47:09 · 133 阅读 · 0 评论 -
四大组件(5) - Fragment
由于Activity太“重” 不能动态注册、不能模块化,因此引入Fragment 一、生命周期 onAttach():Fragment和Activity相关联时调用。可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。 onCreateView():创建Fragment的布局。 onActivityCreated():当Activity完成onCreat...原创 2019-11-30 20:45:55 · 288 阅读 · 0 评论 -
本地存储(1) - File
Android 的存储分为三类:内存、内置|外置SD 卡,应用安装后,系统会根据应用的包名在内存创建一个/data/data/包名/的文件夹,默认私有的,用于存储一些简单的文本数据或者二进制数据. 我们知道直接File file = new File(“info.txt”); 会报文件找不到的异常,因为这样写会被创建到手机内部存储的根目录里面,但是内部存储根目录是只读不可写的。 优化:Fil...原创 2019-11-30 20:47:05 · 545 阅读 · 0 评论 -
本地存储(2) - SP
SharedPreferences 在内存/data/data/包名/shared_prefs目录下,以xml格式进行保存,适用于存储一些键值对,一般用来存储配置信息。 一、优缺点 1、与数据库相比,免去了创建数据库、表,写SQL语句等诸多操作,相对而言操作更加方便,快捷。 2、只能存储五种简单的数据类型 (boolean float int long string) 3、无法进行...原创 2019-11-30 20:46:58 · 895 阅读 · 0 评论 -
本地存储(3) - DB
一、原生SQLite 优化措施: 1.多线程读,单线程写,读写分离,各线程维护一个SQLiteOpenHelper。 参考:https://blog.youkuaiyun.com/u010205141/article/details/44182461 2.使用索引和事务 参考:https://blog.youkuaiyun.com/txvaqh/article/details/52412958 3.代码层面 ...原创 2019-11-30 20:46:53 · 191 阅读 · 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 · 386 阅读 · 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 · 190 阅读 · 0 评论 -
View(3) - 手势
一、种类(常用的4种) 1.OnGestureListener 标准手势 2.OnDoubleTapListener 双击 3.SimpleOnGestureListener 单击 4.ScaleGestureDetector 简单的缩放,没有拖动 (类,用于继承) 二、使用方法 1.Activity或者View implements GestureDetector.OnGes...原创 2019-11-29 21:53:25 · 250 阅读 · 0 评论 -
View(4) - 自定义控件
一、实现方式 1.继承View重写onDraw方法 2.继承View、ViewGroup 派生特殊的View、Layout 例如:继承TextView 继承LinearLayout等等 二、注意事项 1.让View支持wrap_content 2.让View支持padding 3.尽量不要在View中使用Handler 三、其它 1、自定义View如何提供获取View...原创 2019-11-29 21:55:42 · 176 阅读 · 0 评论 -
View(5) - RecyclerView
一、优缺点对比 1、rView继承的RecyclerView.Adapter ; ListView的Adapter继承的是BaseAdapter 2、rView支持多种显示样式 LinearLayoutManager GridLayoutManager StraggeredGridLayoutManager 3、rView有默认的方法onCreateViewHolder ->...原创 2019-11-30 20:45:39 · 152 阅读 · 0 评论 -
通信(1) - 应用线程通信
1. 数据 (共享内存变量、文件) 2. Handler 3. LocalBoradCast(单例 + 观察者模式 + Handler组成 原始BoradCast由于需要经由AMS多次跨进程BInder效率很低下) 具体参考 : https://www.jianshu.com/p/6f1ea19a17ed 4. runOnUiThread方法 https://www.jianshu.com...原创 2019-11-29 21:41:38 · 122 阅读 · 0 评论 -
通信(2) - 应用进程通信
一、应用进程通信 1、BoradCast 2、AIDL 3、ContentPrivder 4、HermesEventBus https://blog.youkuaiyun.com/jdsjlzx/article/details/52279314 以上都是基于binder机制 二、linuxIPC方式 1、管道(Pipe)及有名管道(named pipe) 2、信号(Signal) ...原创 2019-11-29 21:46:58 · 246 阅读 · 1 评论 -
通信(3) - 网络短连接
一、概述 基础框架有HttpClient、HttpURLConnection、Okhttp3个 1. HttpClient是Apache 的一个三方网络框架,网络请求做了完善的封装 ,api众多,用起来比较方便,开发快。 android5.0被废弃,6.0删除。(被okHttp取代) 2. HttpURLConnection 一个多用途、轻量级的Http客户端。 HttpUr...原创 2019-11-29 21:47:18 · 564 阅读 · 0 评论 -
通信(4) - 网络长链接
1. 使用第三方的长连接服务 这是最简单的方式,我们可以通过接入极光推送,百度推送,友盟等第三方服务实现长连接,通过接入第三方的API我们可以很方便的接入第三方的长连接,推送服务,但是这种方式定制化程度不太好,如果对长连接服务不是要求特别高,对定制化要求不是很高的话基本可以考虑这种方式(目前主流的App都是使用第三方的长连接服务) 优势:简单,方便 劣势:定制化程度不高 2. 使用N...原创 2019-11-29 21:47:26 · 223 阅读 · 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 · 336 阅读 · 0 评论 -
适配(2) - 系统
市场占有率分布:https://mta.qq.com/mta/data/device/os 5.0 1. multiDexEnabled 在.build文件设置multiDexEnabled = true (5.0+支持) 继承MultiDexApplication or implements attachBaseContext (5.0以下系统) 官方multidex适配:https:...原创 2019-11-27 09:46:30 · 287 阅读 · 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 · 160 阅读 · 0 评论 -
优化(2) - 内存
尽量少新建对象,共用对象,及时释放无用对象 一、分类 1、内存泄露 -> 由于某种原因导致gc无法及时回收对象。(持有引用者生命周期大于被引用者生命周期) 2、内存抖动 -> 频繁创建大量临时的小对象。 3、内存溢出 -> 超过应用最大使用内存上限,常见都由上述2种情况造成。 二、内存泄露 1、资源类。例如: 数据库 、广播监听、bitmap等 2...原创 2019-11-27 09:13:13 · 146 阅读 · 0 评论 -
优化(3) - 网络
1、合理规范的接口设计 在扩展性和接口请求次数之间寻找一个平衡,同时坚决避免传输无意义的字段 2、gizp压缩 聊聊HTTP gzip压缩与常见的Android网络框架 3、合理的序列化协议 JSON、Protobuf等 JSON、Protobuf、Thrift、MessagePack:https://blog.51cto.com/13952501/2173038 4、内容缓存 5、...原创 2019-11-27 09:19:55 · 164 阅读 · 0 评论 -
优化(4) - 电量
一、手机最耗电的地方 1.唤醒屏幕 2.CPU唤醒使用 3.蜂窝煤比wifi费电 二、电量检测工具 1.因为电量统计数据是持续的, 会非常大, 统计我们的待测试App之前先reset下, 连上设备, 命令行执行: $ adb shell dumpsys batterystats --reset Battery stats reset 2.断开测试设备, 操作我们的待测试App...原创 2019-11-27 09:20:38 · 216 阅读 · 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 · 231 阅读 · 0 评论 -
安全(1) - 代码安全
一、分类 1.混淆 (java文件) 2.加固 (Dex文件) 3.防止应用被调试 4.防止应用被Hook操作 5.防2次打包 - 签名校验防护策略 二、混淆 功能 1.压缩(在打包的时候来检查并移除代码中没有用到的字段、方法、属性和类) 2.优化(它可以对字节码进行优化,对.class文件里无用的操作移除) 3.混淆(把有意的名词变成无意的名词) 4.预检测(第二次进...原创 2019-11-27 09:47:40 · 391 阅读 · 0 评论 -
安全(2) - 本地数据
一、Shared Preferences Shared Preferences存储安全风险源于以下两方面: 1.不要使用MODE_WORLD_WRITEABLE和MODE_WORLD_READABLE模式创建进程间通信的文件,此处即为Shared Preferences; 2.尽量避免将密码等敏感数据明文存储在Shared Preferences中(Root后存在信息泄露的隐患)。 3.尽...原创 2019-11-27 09:48:19 · 373 阅读 · 0 评论 -
安全(3) - 组件安全
1.LogCat安全风险 AndroidManifest.xml设置Android:debuggable=”false” //关掉日志输 2.禁止adb备份应用数据 将AndroidMannifest.xml文件中的android:allowBackup属性值设为false 参考:https://blog.youkuaiyun.com/qq_31387043/artic...原创 2019-11-27 09:48:50 · 285 阅读 · 0 评论 -
安全(4) - 网络通信
一、Http和Https 方式: 认证+加密 http: 禁止将敏感数据明文传输 。(利用一定的加密策略加密) 数据加密方式:https://www.jianshu.com/p/26adec49cb34 https: 一定要对证书的有效性做校验。最好做到双向认证。 单向、双向认证原理:https://blog.youkuaiyun.com/chenchuanhai04/article/deta...原创 2019-11-29 21:41:01 · 204 阅读 · 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 · 463 阅读 · 0 评论
分享