android
文章平均质量分 96
十一月Siy
岁月写诗
展开
-
记录一下面试考题二(Ap性能优化,Activity、Window和View,TLS1.1,TLS1.2)
1,APP性能优化APK瘦身将图片转换为 webp 格式WebP是谷歌提供的一种支持有损压缩和无损压缩的图片文件格式,而且可以提供比JPEG或PNG更好的压缩。在Android 4.0(API level 14)中支持有损的WebP图像,在Android 4.3(API level 18)和更高版本中支持无损和透明的WebP图像。除去多语言android{ ... defaultConfig{ ... //只保留英语 resC原创 2020-05-18 22:12:32 · 426 阅读 · 0 评论 -
记录一下面试考题一(组件化,ListView和RecyleView区别,App启动,Binder)
1,组件化和ARouter原理组件化定义:由若干独立的子模块,组合成一个整体,降低模块间的耦合,这些子模块在补足一定的条件下,都可独立运行。主模块也不会因为缺少任意子模块而无法运行。组件之间可以灵活的组建。这里面有一个主要的问题就是组件之间的通信和页面跳转。通信原理总所周知,Android提供了很多不同的信息的传递方式,比如在四大组件中本地广播、进程间的AIDL、匿名间的内存共享、Intent Bundle传递等等,那么在这么多传递方式,哪种类型是比较适合组件与组件直接的传递呢。1、本.原创 2020-05-17 16:54:48 · 472 阅读 · 0 评论 -
Android的MVVM架构的单Activity应用实践
前言谈Android架构大家很容易想到MVC、MVP和MVVM。1、MVC首先分析一下上面各层之前对应的Android代码,layout.xml里面的xml文件就对应于MVC的view层,里面都是一些view的布局代码,而各种Javabean,还有一些类似repository类就对应于model层,至于controller层嘛,当然就是各种activity。理论上应该是这么分,但...原创 2019-10-30 18:09:57 · 3253 阅读 · 0 评论 -
Android的Handler机制详解3_Looper.looper()不会卡死主线程
这个问题其实已经在知乎有大神回答了:Android中为什么主线程不会因为Looper.loop()里的死循环卡死? public static void main(String[] args) { ... Looper.prepareMainLooper(); ActivityThread thread = new ActivityThread();...原创 2018-05-27 17:43:42 · 2409 阅读 · 0 评论 -
Android的Handler机制详解2_native
接着Android的Handler机制详解1_framework 讲。原创 2018-05-27 00:44:34 · 1222 阅读 · 0 评论 -
用于过滤aar中冲突类(class)和so库的脚本,也可以用来过滤jar中冲突class
需求产生的原因,有时候我们接入三方包的时候,会出现类冲突,这个时候我们就想能不能把三方包中的冲突类过滤掉,不参与编译。网上百度,google都没有找到一个好的解决方案,然后自己动手丰衣足食。灵感来源:Configuring Multi-Project Builds,创建 Android 库AAR库的Class和SO文件过滤将aar库导入项目的方式有2种:1,android{...原创 2018-04-27 18:13:26 · 10830 阅读 · 4 评论 -
一个仿微信但是样式更加灵活的密码框控件
首先看看效果:我为它的很多属性都开放了接口,可以根据自己的需要自由修改。效果看了,接下谈谈它是怎么实现的。主要是思路可以由下图来表示:控件是继承于系统控件TextView,然后重写onDraw(Canvas),这样可以减少很多麻烦。根据图片的显示顺序,首先是绘制黑色的底: /** * 绘制边框,先绘制一整块区域 */ private void drawBoarder(C...原创 2018-05-11 18:00:56 · 976 阅读 · 0 评论 -
Dialog,AlertDialog和DialogFragment
Dialog,AlertDialog和DialogFragment区别这几天做项目突然想到一个问题我们常用的Dialog,AlertDialog和DialogFragment到底有什么区别。Dialog文档地址:https://developer.android.google.cn/reference/android/app/Dialog.htmlAletDialog文档地址:https://de...原创 2018-04-10 18:11:52 · 3963 阅读 · 0 评论 -
java线程池的简单介绍与使用
一、介绍线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程...原创 2017-03-03 13:24:19 · 276 阅读 · 0 评论 -
类图学习,所有资料整理源于网络
基本概念:类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。 类图的3个基本组件:类名、属性、方法。 属性和方法之前可附加的可见性修饰符:加号(+)表示public;减号(-)表示private;井号(#)表示p转载 2017-08-29 11:19:44 · 408 阅读 · 0 评论 -
Binder驱动逻辑
Binder驱动:所有的用户控件方法都会经过系统调用对应到binder驱动方法,如: open-> __open() -> binder_open() binder_initstatic int __init binder_init(void){ int ret; //创建名为binder的工作队列 binder_deferred_wor...转载 2019-02-19 10:32:57 · 193 阅读 · 0 评论 -
Android的Handler机制详解1_framework
Handler消息机制是Android的2打消息机制之一,另一个是Binder IPC机制。一、java层1,组成Message:消息分为硬件产生的消息(如按钮、触摸)和软件生成的消息;(持有一个Handler(target)引用)MessageQueue:消息队列的主要功能向消息池投递消息(MessageQueue.enqueueMessage)和取走消息池的消息(MessageQueue.ne...原创 2018-05-24 12:06:30 · 693 阅读 · 0 评论 -
ServiceManger启动与获取
启动过程ServiceManager是由init进程通过解析init.rc文件而创建的,其所对应的可执行程序/system/bin/servicemanager,所对应的源文件是service_manager.c,进程名为/system/bin/servicemanager。service_manager.cint main(int argc, char **argv) { ...转载 2019-02-19 10:33:57 · 275 阅读 · 0 评论 -
Binder跨进程通讯实例
图解:发起端线程向Binder Driver发起binder ioctl请求后, 便采用环不断talkWithDriver,此时该线程处于阻塞状态, 直到收到如下BR_XXX命令才会结束该过程. BR_TRANSACTION_COMPLETE: oneway模式下,收到该命令则退出 BR_REPLY: 非oneway模式下,收到该命令才退出; BR_DEAD_REPLY...转载 2019-02-19 10:33:43 · 497 阅读 · 0 评论 -
个人主页图片下拉放大效果
先看下效果:个人主页的图片展示可以随着用户的下拉而被放大。那么这个是怎么实现的呢?其实实现方式很简单AppBarLayout+CollapsingToolbarLayout+Toolbar+Behavior。那难点是那么呢?难点是个支持库版本里面AppBarLayout的实现效果是不一样的。我项目用的支持包是“27.1.1”版本,放大和缩小的效果有卡顿,有时候放大了就不缩小了。...原创 2019-03-05 17:39:14 · 1970 阅读 · 1 评论 -
一个带展开按钮的TextView控件
网上找了很多三方的实现但是都不是我想要的效果或者实现比较复杂,然后就自己写了一个。就这种效果其实就是很轻量级的一个实现。首先看我实现的第一个版本。public class ExpandTextView extends AppCompatTextView { /** * 的右侧文字Drawable */ private TextDrawable...原创 2019-03-05 18:03:42 · 580 阅读 · 0 评论 -
一个效果不错的ViewPager
公司的项目想要一个这样效果的ViewPager展示1、第一页和最后一页带有弹性效果2、ViewPager底部图片随着页面滑动切换3、ViewPager页面上的2个图片一个水平切换一个45角切换这个效果如果简单的用原生的ViewPager实现肯定是解决不了的。如果是原生的ViewPager,实现效果如下:很明显这不是我需要的效果。第一页和最后一页带有弹性效果这...原创 2019-03-08 19:18:17 · 218 阅读 · 0 评论 -
Kotlin协程启动(2)
在说协程启动之前来看看线程启动的代码: Thread { println("线程启动") }.start()是不是和协程的启动很像: GlobalScope.launch { println("test continuation start") }其实很多时候都可以用线程的特性来理解协程。再...原创 2019-09-10 22:11:07 · 422 阅读 · 0 评论 -
Kotlin协程挂起(3)
协程的挂起是个很重要也比较难懂的概念。从协程的启动开始讲起。 @Test fun 测试协程启动() { GlobalScope.launch(start = CoroutineStart.DEFAULT) 协程启动的地方@ { val 挂起方法的值 = 挂起方法("测试") println(挂...原创 2019-09-17 19:02:21 · 1428 阅读 · 1 评论 -
Kotlin协程作用域(4)
CoroutineScope:public interface CoroutineScope { public val coroutineContext: CoroutineContext}这里先把这个方法的注释文档放过来:定义新协程的范围。每个协程构建器都是CoroutineScope的扩展,并继承其coroutineContext以自动传播上下文元素和取消。获取范...原创 2019-09-18 23:07:58 · 2109 阅读 · 0 评论 -
使用AndroidStudio的Gradle打混淆jar包和aar包
使用AndroidStudio的gradle打jar包和aar包原创 2017-04-27 11:04:01 · 2786 阅读 · 0 评论 -
Android 手机获取Mac地址的几种方法
Android 获取mac地址的几种方法原创 2017-05-22 16:39:50 · 23070 阅读 · 2 评论 -
Eclipse集成Ant 打包签名APK和打混淆jar
Eclipase使用Ant打签名apk和混淆的jar原创 2017-03-22 18:35:29 · 1001 阅读 · 0 评论 -
RxJava学习篇之二:操作符的讲解(1)
1,just2.from3,create4,empty5,never原创 2016-05-04 15:26:19 · 851 阅读 · 0 评论 -
随着然键盘显示与消失的popuwindow
最近项目中碰到了这么个需求,就是一个popwindow要随着软件键盘弹出与消失,首先看一下完成后的效果。软键盘的显示与隐藏的监听原创 2016-08-16 14:22:16 · 1294 阅读 · 0 评论 -
RxJava学习篇之一:基础Observable,Observer,Single,Subject,Scheduler
本文介绍Rxjava中的基础Observable,Observer,Single,Subject,Scheduler基础知识。实例演示了每个的用法。原创 2016-09-05 11:43:25 · 3847 阅读 · 0 评论 -
Android视图的顶部悬停的实现
项目中经常会用到,一个View悬停到顶部的情况。这里借鉴网上的方式给出来2中实现方式。1,利用ScrollView+ListView实现2,利用ListView增加头部实现。然后简单的分析了一下它们的优缺。原创 2016-08-26 10:58:06 · 4120 阅读 · 0 评论 -
Android 打包 与 反编译
昨晚和同学讨论了android的混淆技术,发现自己在这一块的知识也不怎么明白,今天特意查资料来弥补一下,也贴出共享给大家:大家都知道java代码反编译是很简单的。工具下载,请点击为了防止自己的代码被别人反编译,并且减少jar文件的体积,所以混淆是必须的。apk的反编译:转载 2016-03-16 10:50:28 · 778 阅读 · 0 评论 -
Android手机如何获取手机内存路径和sd卡路径
/** * 获取手机自身内存路径 * */public static String getPhoneCardPath(){return Environment.getDataDirectory().getPath();}/** * 获取sd卡路径 * 双sd卡时,根据”设置“里面的数据存储位置选择,获得的是内置sd卡或外转载 2016-04-25 22:48:42 · 3326 阅读 · 0 评论 -
记录小的知识点防止自己忘记
AIDL:①支持除了shot类型以为的基本类型(byte,char,int,boolean,float,long,double)②支持String,CharSequence类型③支持实现Parcelable序列化的类型④支持List,Map,但是里面传输的类型必须是以上4种原创 2016-03-08 11:23:40 · 530 阅读 · 0 评论 -
RxJava 多线程控制
首先我们得搞明白同步下载5张图片需要5个observable,因为当使用了多个subscribeOn() 的时候,只有第一个 subscribeOn() 起作用,所以我们不能在同一observable上多次指定被观察者的线程。还有就是我们使用了3个操作符。just()可以简化我们observable的创建,map() 方法将参数中的 String 对象转换成一个 Bitmap 对象后回,mergeWith()操作符,两个或更多同类型的 Observable 可以合并到一起去创建一个 Observabl原创 2016-03-08 11:11:22 · 4084 阅读 · 0 评论 -
AS多渠道打包
在讲AS多渠道打包之前,先将一丢丢AS使用的小知识点,防止自己忘记:AS调试的快捷键:F7(进入方法),F8(按行执行),F9(调到一下个断点)还有一个Evaluate Expression我觉得有必要提一下,因为我自己经常用这个:关于ide的外观的一些设置:原创 2016-10-31 11:38:04 · 568 阅读 · 0 评论 -
Html.fromHtml()中Html.TagHandler()的使用
Android,TextView,Html,Html.fromHtml,Tag.Handler,XMLReader原创 2016-11-23 09:42:12 · 10410 阅读 · 5 评论 -
java 加解密算法
包含java加解密算法(base64,des,3des,aes,pbe,dh,rsa,ElGamal) 包含java摘要算法(md2,md4,md5,sha1,sha2((SHA-224,SHA-256, SHA-384,SHA-512)),mac) 包含签名算法(rsa,dsa,ecdsa)原创 2016-11-25 09:54:39 · 2620 阅读 · 0 评论 -
发布开源Library到JCenter
发布自己的Library到Jcenter详解。如果你在https://bintray.com/signup这个网站上注册的账号那就尴尬了。原创 2017-04-26 12:20:17 · 1459 阅读 · 0 评论 -
浅谈 PopupWindow 在 Android 开发中的使用
在Android中弹出式菜单(以下称弹窗)是使用十分广泛一种菜单呈现的方式,弹窗为用户交互提供了便利。关于弹窗的实现大致有以下两种方式AlertDialog和PopupWindow,当然网上也有使用Activity并配合Dialog主题的方式实现弹窗,有兴趣的朋友也可以去研究一下。对于AlertDialog和PopupWindow两者的最主要区别也有以下两点:1 、位置是否固定。 Aler转载 2016-06-24 11:21:24 · 476 阅读 · 0 评论 -
AndroidStudio使用过程中碰到的问题
1,debug 问题单步调试:F8进入方法中:F7下一个端点或者跳出方法外:Shift+F8下一个端点:Alt+F92,lint错误导致无法打Release包报错 Gradle中加上 lintOptions { abortOnError false checkReleaseBuilds false }3,动态链接库如原创 2016-05-23 09:33:39 · 499 阅读 · 0 评论 -
Android 跨进程通讯的方式
我已知Android 的跨进程通信方式有6种,分别为:访问他应用的Activity、接收其他应用的广播、访问其它应用的开放数据、AIDL、Messenger和socket的跨进程通信。(1)访问他应用的Activity举一个简单的例子:这个就是调用系统打电话的代码。这就是一个简单的Activity的跨进程通信。private void test_1(){原创 2016-05-04 15:31:13 · 1425 阅读 · 0 评论 -
Android事件分发机制概括
Android的事件分发机制原创 2016-11-15 15:41:52 · 299 阅读 · 0 评论 -
java对日期时间的处理
公司在做im的时候碰到了这么一个问题:服务器返回的时间是UTC格式的2017-01-05T02:48:52.746Z。而本地的时区是GMT+8.所以我需要对时间进行转化。这里对时区进行简单的介绍一下,便于下面的理解:整个地球分为二十四时区,每个时区都有自己的本地时间,时区差东为正,西为负。在此,把东八区时区差记为 +0800。UTC + 时区差 = 本地时间原创 2017-01-05 10:49:43 · 1134 阅读 · 0 评论