01 2018 档案
摘要:1)开启minifyEnabled 开启混淆,删除没用的java文件 2)开启shrinkResources 去除无用资源 3)resConfigs “zh” 删除无用的语言资源 4)使用tinypng有损压缩 TinyPNG使用一种智能有损压缩技术(通过降低图片中的颜色数量,来减少存储图片所需要的
阅读全文
摘要:类型转换错误,使用Gson之类的需要注意 忽略警告 webview中js和本地代码有交互,保持桥梁类不被混淆 保持注解内容,不被混淆 保持反射调用的java类与方法,不要混淆 第三方包不被混淆 常见第三方包
阅读全文
摘要:原文地址IntentService源码分析 源码可知: 1)实际上是使用了一个 HandlerThread 来维护线程的, 2) HandleThread 中,内部已经维护一个 Looper,这里直接使用 HandlerThread 的 Looper 对象,便于在 IntentService 中去维
阅读全文
摘要:ContentProvider、ContentResolver、ContentObserver之间的关系 ContentPRrovider: * 四大组件的内容提供者,主要用于对外提供数据 * 实现各个应用程序之间的(跨应用)数据共享,比如联系人应用中就使用了ContentProvider,你在自己
阅读全文
摘要:1)Android是基于Linux内核的,因此Linux对文件权限的控制同样适用于Android。在Android中每个应用都有自己的/data/data/包名文件夹,该文件夹只能该应用访问,而其他应用则无权访问 2)Android的权限机制保护了用户的合法权益。如果我们的代码想拨打电话、发送短信、
阅读全文
摘要:为了应用常驻后台,避免被第三方杀掉的方法 1)Service设置成START-STICKY kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样 2)通过startForeground将进程设置为前台进程 3)做前台服务,优先级和前台应用一个级别,除非在系统内存非常缺,否则此进程
阅读全文
摘要:Picasso、Imageloader、Fresco、Glide的优劣 Fresco: 优点: 1)图片存储在安卓系统的匿名共享内存,而不是虚拟机的堆内存中,图片的中间缓存数据也存放在本地堆内存,所以,应用程序有更多的内存使用,不会因为图片加载而导致oom,同时也减少垃圾回收器频繁调用回收Bitma
阅读全文
摘要:handler面试必问 解析: Android提供了Handler和Looper来满足线程间的通信。 Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。 1)Looper:一个线程可以产生一个Looper对象,由它来管理此线程里的Me
阅读全文
摘要:最近一直在读马伟奇老师的简书,给人以不一样的感觉,接下来的时间会做做笔记,毕竟好东西变成自己的才有用 原文地址SharedPreferencesUtils 依赖 调用即可
阅读全文
摘要:原文地址:https://www.jianshu.com/p/33d499170e25
阅读全文
摘要:No1: ANR--Application Not Responding,也就是在规定的时间内,没有响应。ANR有三种类型 1)KeyDispatchTimeout(5 seconds)--主要类型按键或触摸事件在特定时间内无响应 2)BroadcastTimeout(10 seconds)--Br
阅读全文
摘要:原文地址Android面试题-onCreate源码都没看过,怎好意思说自己做android Activity扮演了一个界面展示的角色,堪称四大组件之首,onCreate是Activity的执行入口,都不知道入口到底干了嘛,还学什么android,所以本文会从源码的角度对其进行分析。 熟悉源码的会发现
阅读全文
摘要:问:线程池的启动策略 线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。 当调用execute()方法添加一个任务时,线程池会做如下判断 1)如果正在运行的线程数量小于corePoolSize,那么马上创建线程运行这个任务 2)当一个线
阅读全文
摘要:原文地址腾讯QQ第三方登录的实现原理? Oauth当中的角色: 1.Service Provider(服务提供方): 服务提供方通常是网站,在这些网站当中存储着一些受限制的资源,如照片、视频、联系人列表等。这些网站通常使用用户名和密码来确认用户的身份。比如新浪微博的开放平台就是Service Pro
阅读全文
摘要:问:为什么service里面startActivity抛异常,activity不会? No1: 启动activity有两种形式: 1)直接调用Context类的startActivity方法;这种方式启动的Activity没有Activity栈,因此不能以standard方式启动,必须加上FLAG_
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(十四)--JNI和NDK编程 No1: 如果<include>制定了这个id属性,同时被包含的布局文件的根元素也制定了id属性,那么以<include>指定的id属性为准 No2: 绘制优化 1)onDraw中不要创建新的局部对象 2)onDraw方法中
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(十三)--综合技术 No1: Java JNI--Java Native Interface(java本地接口),它是为了方便java调用C、C++等本地代码锁封装的一层接口。 No2: NDK是Android所提供的一个工具集合,通过NDK可以在And
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(十二)--Bitmap的加载和Cache No1: 使用CrashHandler来获取应用的crash信息 No2: 在Android中单个dex文件所能够包含的最大方法数为65536,这包含Android FrameWork、依赖的jar包以及应用本身
阅读全文
摘要:No1: 插件化技术的好处: 1)减轻应用的内存和CPU占用 2)实现热插拔,即在不发布新版本的情况下更新某些模块 No2: 插件化方案必须要解决三个基础性问题:资源访问、Activity生命周期的管理和ClassLoader的管理 No3: 宿主是指普通的apk,插件一般指经过处理的dex或者ap
阅读全文
摘要:源码地址https://github.com/king1039/android-art-res/tree/master/Chapter_13/CrashTest/src/com/ryg/crashtest 使用 测试
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(十一)--Android的线程和线程池 No1: 目前比较常用的缓存策略是LruCache和DiskLruCache,LruCache常被用作内存缓存,DiskLruCache常被用作存储设备缓存。 Lru是Least Recently Used的缩写,
阅读全文
摘要:原文地址https://github.com/singwhatiwanna/android-art-res/tree/master/Chapter_12/src/com/ryg/chapter_12/loader
阅读全文
摘要:需求:WebView中的图片点击后放大全屏查看 通过重写js来实现
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(十)--Android的消息机制 No1: 在Android中可以扮演线程角色的有很多,比如AsyncTask、IntentService、HandlerThread。 AsyncTask底层封装了线程池和Handler,主要是为了方便开发者在子线程中更
阅读全文
摘要:构造方法 参数意义: coreProolSize:线程池核心线程数 maximumPoolSize:线程池所能容纳的最大线程数 keepAliveTime:非核心线程闲置时的超时时长,超过这个时长,非核心线程就会被回收。当ThreadPoolExecutor的allowCoreThreadTimeO
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(九)--四大组件 No1: 消息队列MessageQueue的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表,因为单链表在插入和删除上比较有优势 No2: ThreadLocal可以在不同的线程中互不干扰地存储并提供数据,通过Thr
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(八)--WindowManager No1: 四大组件除了BroadcastReceiver,其他三种组件都必须在AndroidManifest中注册。 在调用方式上,除了ContentProvider,其他三种组件都需要借助Intent。 No2: A
阅读全文
摘要:ContentProvider启动过程(通过query方法触发) ContentProvider.acquireProvider--> ApplicationContentResolver.acquireProvider--> ActivityThread.acquireProvider--> Ac
阅读全文
摘要:动态注册过程: ContextWrapper.registerReceiver--> ContextImpl.registerReceiver--> ContextImpl.registerReceiverInternal--> ActivityManagerNative.getDefault().
阅读全文
摘要:重写webview内的方法 原文地址Android webView拦截url
阅读全文
摘要:需求: 1.页面上悬浮一个搜索框,点击可伸缩 2.可以搜索上一个下一个 3.搜索标题内容 效果图: 注意点: 1.起始一个搜索小图片,终止一长条搜索框,中间用View做一个动画,这三个都是CardView 2.为了处处使用,封装了起来 3.搜索到的内容放进一个list,保存位置,点击上一个下一个滑动
阅读全文
摘要:Service两种工作状态的作用 1)启动状态:用于执行后台计算 2)绑定状态:用于其他组件和Service的交互 注意:Service这两种状态可以共存,即Service既可以处于启动状态也可以同时处于绑定状态 Service启动过程 ContextWrapper.startService-->
阅读全文
摘要:Activity工作过程: Activity.startActivity--> Activity.startActivityForResult--> Instrumentation.execStartActivity--> ActivityManagerNative.getDefault().sta
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(七)--动画 No1: Window是一个抽象类,它的具体实现是PhoneWindow。创建一个Window是很简单的事,只需要通过WindowManager即可完成。 WindowManager是外界访问Window的入口,Window的具体实现位于W
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(六)--Drawable No1: 自定义动画:派生一种新动画只需要继承Animation这个抽象类,然后重写它的initialize和applyTransformation方法,在initialize方法中做一些初始化工作,在applyTransfor
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(五)--RemoteViews 【BitmapDrawable】 简单的图片 【NinePatchDrawable】 .9图 【ShapeDrawable】 通过颜色来构造的图形,即<shape>标签,百度一搜一堆,这里就不写了 【LayerDrawab
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(四)--View工作原理 No1: RemoteViews使用场景:通知栏和桌面小部件 No2: 通知栏主要通过NotificationManager的notify方法来实现的 桌面小部件是通过AppWidgetProvider来实现的,AppWidge
阅读全文
摘要:PendingIntent表示一种即将发生的意图,和Intent的区别在于:PendingIntent是在将来的某个不确定的时刻发生,而Intent是立刻发生 典型使用场景是给RemoteViews添加单击事件,想要给RemoteViews设置单击事件,就必须使用PendingIntent 第二个参
阅读全文
摘要:AppWidgetProvider是android提供实现桌面小部件的类,本质是一个广播,即BroadcastReceiver。是继承关系 开发步骤: 1.在res/layout/下新建一个XML文件,命令为widget.xml,名称和内容可以自定义 2.在res/xml/下新建appwidget_
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(三) No1: View的三大流程:测量流程、布局流程、绘制流程 No2: ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。 在Activ
阅读全文
摘要:接上篇《android开发艺术探索》读书笔记(二) No1: 通过MotionEvent对象可以得到点击事件发生的x和y坐标,getX/getY返回的是相对于当前View左上角的x和y坐标,而getRawX/getRawY返回的是相对于手机屏幕左上角的x和y坐标。 No2: TouchSlop是系统
阅读全文