自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 ObservableList和databinding的一点理解

使用databinding的话ObservableList的话就不可避免的使用了,但是最近遇到的问题才对databinding有了更近一步的理解ObservableList有addOnListChangedCallback可以注册回调,就是观察者模式无需多言,其实初接触databinding会有使用这个方法的动机,在回调中刷新UI什么的。但是这样做其实是有个问题的,例如下面的代码: xx...

2018-11-02 15:58:06 3847

原创 android clipToPadding的一点理解

这个网上总结的很多,见android 关于 clipToPadding 和 clipChildren区别和作用最近遇到的一处android ui问题最终使用clipToPadding得到了完美的解决,下面谈下个人对clipToPadding的理解。这个是ViewGroup的属性,View是没有的 clipToPadding必须与paddingTop等属性一起用,不然没有任何意义 默认的...

2018-10-28 14:53:45 1375

原创 crashlytics接入后不上报crash的问题

crashlytics接入十分简单,安装android studio的fabric插件,一路点击鼠标即可,一个字符的代码都不用敲。不过接入后可能会发现crash不上报啊,这个太坑了,笔者就正好遇到了这个问题。官方文档中也写了解决方法,就是把crashlytics的初始化代码挪到其他三方库初始化之后就OK了。其实这个原因大概也能猜测出来。java捕捉未捕获异常使用的是UncaughtEx...

2018-10-25 20:34:56 1818

原创 android button背景图片不拉伸的一种处理方法

一般来说UI给的图片比例应该和控件是正好符合的,但是实际操作过程中会发现可能不符合的情况,比例不对直接设置background的话background会被拉伸,这个时候一般来说如果能像ImageView一样设置scaleType为centerCrop或者center就好了。不过可惜的是button等其他控件是没有这个属性可以设置的。但是是有其他方法可以做到的,也很简单,使用bitmap的xml...

2018-10-25 20:21:38 5485

原创 WeakReference在android中的使用场景

android中绝大部分内存泄漏都是Context导致的,应为context的传递实在是太多了。基本原理就一条,如果class B持有class A,而class B的生命周期比class A长,A要销毁但是因为B的引用而无法销毁那么leak就发生了。实际代码中,class B一般是异步代码(执行时间长且不确定)或服务(一般和UI无关),class A是Context持有者或者就是Cont...

2018-10-12 10:45:49 2151

原创 git和gerrit常用操作汇总

个人常用的git和gerrit操作 rebase分支之间的这种情况常见于迭代开始时候从master新建开发分支,迭代结束的时候合并到master$ git checkout mywork$ git rebase origin这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebas...

2018-10-11 18:05:43 2970

原创 android9.0后对hide方法反射限制的分析

和之前同事吃饭时候了解到一个消息,就是android9.0开始限制@hide方法的使用,即使是用反射也无法使用hide方法。把我吓出一身汗,app中用各种反射是家常便饭,尤其是对framework很熟的情况下。回公司赶快看下android的官方文档:https://developer.android.com/about/versions/pie/restrictions-non-sdk-int...

2018-10-08 16:49:52 12683 3

原创 gpu呈现模式分析柱状图无故爆表的原因

android开发估计都会用gpu呈现模式分析来看下app运行时候的表现,不过最近遇到一个奇怪的现象,配置很好的android机器,例如三星Galaxy和pixel2,都是四五千的机器,在一个app的页面gpu呈现模式分析柱状图却会稳定的超过绿线,熟悉android的应该知道这是帧率不足的表现,应该优化。不过同样的页面在一个低端的机器例如魅蓝却不会出现这种状况,这个很是郁闷。在RecyclerVi...

2018-10-08 16:35:59 1000

原创 android:maxWidth无效

android:maxWidth用过几次,之前有效,今天再用就无效了。其实是有两个注意点的,记录下:1. android:adjustViewBounds="true"2.android:layout_width不能是match_parent

2018-05-07 15:19:26 6069

原创 Android EditText 换行和对齐问题研究

1.原生方法换行Android textview换行属性有BreakStrategy和hyphenationFrequencyandroid:breakStrategyBreak strategy (control over paragraph layout).Must be one of the following constant values.ConstantValueDescription...

2018-04-25 16:51:50 6975

原创 EditText自定义光标的问题

自定义光标按说很简单,xml中定义android:textCursorDrawable不过我自定义了一个Shape后发现与预期不符,不知原因在哪里,不想多追究了,直接拿原生的改吧。<inset xmlns:android="http://schemas.android.com/apk/res/android" android:inset="2dp" > <...

2018-04-25 16:43:31 1209

原创 TextView行高的问题

上文中提及了自定义选择背景,自定义后如果不是像原生一样填充满选择区域的话,例如每行有空隙,就会发现另一个问题,textview每行的高度居然有差异。具体来说是分为首行,尾行,单行,中间行四种。在Android TextView行间距解析中其实已经解释了这种现象的原因。StaticLayout.javaprivate int out(CharSequence text, int start, int...

2018-04-25 16:31:50 1396

原创 EditText选择背景自定义

默认的选择背景绘制流程TextView.java@Overrideprotected void onDraw(Canvas canvas) { … Path highlight = getUpdatedHighlightPath(); if (mEditor != null) { mEditor.onDraw(canvas, layout, highlig...

2018-04-25 16:06:31 790

原创 transaction动画在魅蓝的坑

transaction动画一般用于fragment的切换动画。使用类似Animation或者Animator。当然区别还是有的,例如fragment.setSharedElementEnterTransition(sharedEnterAnimation);设置进入动画后并不需要再使用setSharedElementReturnTransition设置返回动画,返回动画会使用进入动画逆序自动生成t...

2018-04-25 15:27:34 496

原创 okhttp源码分析

okhttp是square比较老的项目了,目前没多少人用了,可能大多数用square的retrofit替代了,不过retrofit的底层还是复用了okhttp的代码的。本文出于好奇分析下一次http请求从底到上的流程基本流程从最常见的demo开始吧,demo 从http://blog.csdn.net/lmj623565791/article/details/47911083 copy

2018-01-09 16:12:00 315

原创 RxAndroid的改动

RxAndroid基于RxJava,可以说就是RxJava。main目录除去测试目录只有4个java文件,添加了Android特有的schedulers。RxAndroid-2.x/rxandroid/src/main/java/io/reactivex/android/schedulers/HandlerScheduler.javaAndroid中的Handler可以控制代码的运

2018-01-09 15:14:09 262

原创 rxjava源码分析

Rxjava在Android界很火,不过博主工作并不接触网络开发,没有大批量多层次的使用异步任务的机会。一直听说但是并没有使用,更不会深入分析它的机制。不过出于好奇本文会研究下源码中个人关注的点,注意本文并不介绍rxjava如何使用。源码版本是RxJava-2.x,2018.1.5下载。rxjava的起点就是Observable.java1. create先看下create的d

2018-01-09 14:51:51 908

原创 okhttp,retrofit,volley,HttpClient,HttpUrlConnection之间的关系

Android网络开发不可避免的会接触到标题中的一些名词,本文整理下这个之间的关系。对软件来说有个万能定律定律就是有什么“解决不了的问题就加个中间层,如果还是解决不了就多加几层”基于unix的计算机操作系统可以分为内核层和用户层1.内核层的驱动框架和系统调用。按网络层次来说,物理设备网卡,线路等对应最底层,tcp和ip由内核实现。对上的系统调用就围绕socket展开(诸如绑定,监听等)

2018-01-04 12:21:17 1804

原创 installExistingPackageAsUser方法的分析

Android应用双开实现中用到installExistingPackageAsUser方法,下面分析下该方法的流程public int installExistingPackageAsUser(String packageName, int userId) { //检查安装app权限 mContext.enforceCallingOrSelfPermissio

2017-10-26 15:47:13 3442

原创 开启User流程

startUser的流程

2017-10-26 14:48:32 1957

原创 Create User流程

framework中User创建流程和PackageManagerService相关的详细流程

2017-10-24 10:59:45 4186

原创 BasicManageProfile申请设备管理user的流程分析

上篇双开中提及了BasicManagedProfile demo,本文分析下demo中申请manage profile user的流程development/samples/browseable/BasicManagedProfile/src/com/example/android/basicmanagedprofile/SetupProfileFragment.java priva

2017-10-24 09:16:25 2361 3

原创 Android应用双开实现

Android应用双开是某些特殊人群的需要,目前已知的双开方案个人总结为3种:1.反编译apk,然后修改uid等相关信息让系统弄认为apk有不同,然后重新安装。这个方法是简单粗暴的,不过目前主流的app估计都会预防这种修改方法的。对于手机厂商来说,拥有整个系统的代码权限,不会用这么低级的手段。此种方法我个人也无深入研究。2.插件化,在启动代理apk后动态加载需要双开的apk,此种方法是双开...

2017-10-23 16:44:20 22923 6

原创 勿扰模式详细分析

之前也写过勿扰模式的大概分析文章勿扰模式代码结构简析不过只是大概讲了下相关文件的位置和作用,具体只分析了勿扰模式对来电铃声影响的代码。在做具体需求的时候发现勿扰模式远比我想象的复杂,本文记录下几个开发中遇到的勿扰模式相关知识。系统通知拦截的实现勿扰模式控制的就是通知的行为,发送通知的时候控制通知铃声是否响,通知的UI是否展现等等。入口的方法就在发送通知的时候frameworks/b

2017-10-13 11:39:13 4274 3

原创 weak global reference table overflow (max=51200)

最近有测试上报一个Dialer native crash的问题10-04 01:00:00.580 18664 18664 F art : art/runtime/runtime.cc:422] Runtime aborting...10-04 01:00:00.580 18664 18664 F art : art/runtime/runtime.cc:422] Abort

2017-10-13 11:29:32 6981 4

原创 cdma拨号的细节记录

cdma拨号是没有alerting状态的,即接通基站后就是active状态。所以即使对方没有接通,手机也会开始通话计时。针对这种问题,运营商后续加入了接通的上报事件,这样接通后手机的计时会重置。但youyu

2017-10-13 10:21:34 826

原创 系统换了新签名,但是apk还是用老签名才能运行

Android系统的签名文件都在build/target/product/security/目录下,芯片厂商或者方案商发布的源码都是google默认签名,手机终端商一般来说会换签名。新签名的apk在旧签名的系统上是无法运行,反过来也一样。不过今天遇到个奇葩的问题,问题手机的Dialer.apk只用旧签名的才能运行,push新签名的apk会没有反应Dialer的签名见Android.mk

2017-09-14 13:48:54 475

原创 申请获取权限无效问题分析

最近拿到高通的新机器,开发中突然有同事发现一个问题,Contacts替换后android.permission.CALL_PHONE权限获取不到,系统的联系人应用居然没法打电话看日志中拉起GrantPermissionsActivity的intent是已经发送的,那么就看权限对话框为何没有出现。android/packages/apps/PackageInstaller/src/com/a

2017-09-13 14:38:57 4181

原创 移动运营商订制短信卡片无法点击

移动定制机的软件要求很多。最近遇到个奇葩的问题,就是何如移动只能短信sdk后

2017-09-08 11:07:02 646

原创 luma3ds7.1按start键开机无法启动payload解决

最近从闲鱼买了个老版本3ds,夕阳的机器,最新的b9破解。不过对喜欢游戏的人来说这个无所谓,能玩逆转裁判就够了。寄过来就自带了逆转裁判6,花了两周才通关。其它自带的塞尔达马里奥的实在是没兴趣,然后就想装逆转裁判5,。没想到时隔这么多年,玩破解的门槛直线上升。当年无论是gba或者是psp,玩游戏吧游戏文件直接拷贝到存储卡就完事,现在的手续就无比复杂了。1.游戏格式是3ds,要先转换成cia格式,ci...

2017-09-08 10:44:59 21908 2

原创 Shape画圆环的注意点

最近UI有需求要画个圆环,当然想到用shape,本着copy来代码就能用的原则百度了下,发现好多例子都是这样写的 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:innerRadius="100dp" androi

2017-09-05 14:41:08 6246 3

原创 mtk和高通是如何把自己的内容打包到系统镜像中的

有人问我这样一个问题,就是高通或者mtk是如何将自己的内容打包到system.img中的。接触编译比较少的,所以对这个还是陌生的,不过目前android的相关资料太详实了,自己看文章和追踪代码过程记录如下。文章首推“老罗Android之旅”,其中有4篇文章讲解编译系统的,这个是强烈推荐大家看的。简略的原理如下:各个模块下都会有Android.mk文件,这个是编译脚本的片段。在一次Android

2017-08-28 17:35:26 2217

原创 其实和app无关的anr问题分析

每个Android程序员都会遇到anr问题,anr问题的根源是代码处理中超时,例如超时广播处理超时10s之类的。处理的方法百度google可以见到千篇一律的主线程不要做耗时操作,这个是没错,不过依据我个人这几年的经验来看,大部分app遇到的anr问题和app自生是没有任何关系的。看一份日志:08-19 12:14:57.269475 1111 1130 E ANRManager: ANR

2017-08-25 15:28:40 4963 2

原创 dex2oat导致机器很卡的问题分析

上周末碰到玩游戏爆卡,周一过来连上adb看个究竟,发现dex2oat进程占用的cpu很高,游戏运行中一直是大于70%dex2oat应该是在安装app的时候转化java代码到机器码,这样会大幅提高程序效率。对于app来说这个应该只会跑一次,但是在我手机上dex2oat一直是处于运行状态,这个很奇怪。看日志:08-21 12:21:47.476 I/dex2oat (15925): /sy

2017-08-21 14:34:54 8136

原创 勿扰模式代码结构简析

勿扰模式是Android 7.0开始加入的功能。它的核心思想是拦截通知,例如原生中来电UI是通过通知拉起来的。代码分散在几部分。设置代码在Settings中

2017-08-08 11:05:26 2410

原创 CarrierConfigManager解析

最近做一个高通项目的移植,发现网络设置中的cdma和gsm设置项目是同时出现的,之前mtk的项目也是遇到过同样的问题。修改起来很简单,不过要探究根源还是小费力气的。packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.javaprivate void updateBody() { ...

2017-08-04 18:05:35 4967 2

原创 “SIM卡状态”中的dBm和状态栏的信号格数是对应的吗?

Android手机设置中最后一项一般都是“关于手机”,在这个项目中可以找到查看sim卡状态的子页面。其中可以查看信号强度,测试人员可以依据dBm和状态栏的信号格数大致确认两者之间的关系。这个大部分情况下是ok的,不过对于Cdma网络来说这个就有可能出问题了。截图中的状态栏信号格数是双行的,这个是Cdma的特点,1X信号和EVDO信号同时注册的,1x用来语音通话,EVDO就和其名称一

2017-08-04 16:16:23 6079

原创 radiolog不全的问题

最近遇到一个bug,发现rillog中大部分信息是没有的,问题根本无法排查。从telephony framework最常用的Rlog开始分析frameworks/base/telephony/java/android/telephony/Rlog.java public static int d(String tag, String msg) { return

2017-07-26 15:52:46 691

原创 Python 字符串,字典,数据库,列表和json互相转化

最近用Django搭建后台,用到比较多的Python和HTML,其中比较麻烦的是数据类型转换,在此记下来,方便下次查找。数据库转jsondef changeJson(data): jsonDt = [] for row in data: result = {} result['id'] = row[0] result['name'] =

2017-07-04 14:28:39 4841 1

原创 procrank和dumpsys meminfo的pss大小不同的原因

常用的查看app运行内存消耗的有adb shell procranklgy@lgy-PC:~$ adb shell procrank|grep dialer19164 1646272K 68160K 8043K 6080K 9304K 284K com.android.dialer和adb shell dumpsys meminfolgy@lgy-PC

2017-06-30 16:27:22 3929 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除