Android
文章平均质量分 62
chwnpp2
这个作者很懒,什么都没留下…
展开
-
Fragment must be a public static class to be properly recreated from instance state.
最近在调试一个老库时,遇到一个崩溃: Caused by: java.lang.IllegalStateException: Fragment com.lianjia.common.ui.gallery.ui.PermissionNotGrantedFragment must be a public static class to be properly recreated from instance state. at android.app.BackStackRecord.d原创 2020-07-01 12:51:25 · 1676 阅读 · 0 评论 -
Boolean.valueOf("1")与Boolean.parseBoolean("1")的取值
Boolean.valueOf(“1”)与Boolean.parseBoolean(“1”)的取值 boolean r1 = Boolean.valueOf("1"); boolean r2 = Boolean.parseBoolean("1"); boolean r3 = Boolean.parseBoolean("TRUE"); boolean r4 = Boo...原创 2020-03-23 22:38:17 · 1768 阅读 · 0 评论 -
Expected a com.google.gson.JsonObject but was com.google.gson.JsonNull
发现调试日志中有如下异常日志:com.google.gson.JsonSyntaxException: Expected a com.google.gson.JsonObject but was com.google.gson.JsonNull查看对应代码: if (!TextUtils.isEmpty(refString)) { try { digPos...原创 2020-02-04 23:23:03 · 8664 阅读 · 1 评论 -
Replugin插件化框架核心原理
插件化技术随着360公司2016年DroidPlugin、2017年RePlugin的相继公布和开源,达到了顶峰。随后这几年进入了普及和落地期,到今天已不再新鲜和热门。但对于以插件化框架为基础架构进行业务开发的同学而言,熟悉其原理和具体实现,不仅是工作本身需要,也能增进Android内功的修炼。相信了解过Replugin的同学都知道,Replugin的最大特点是坑位和唯一Hook点。那么问题来...原创 2019-12-29 01:59:23 · 956 阅读 · 0 评论 -
使用百度地图SDK进行地址搜索、定位的工作小结
近期因为需求开发的原因,使用了百度地图SDK,现总结如下: 一、地址搜索页面 很多同学一上来就会想到使用SuggestionSearch类来实现,但是SuggestionSearch的本身含义是搜索联想词,即热词。在其侦听方法setOnGetSuggestionResultListener的回调里: @Override public void onGetSuggestionRe原创 2017-06-24 17:55:17 · 9140 阅读 · 0 评论 -
使用ListView时的注意事项有哪些
以下是从平时工作中总结出来的,不知道这些”小坑”,你遇到过没有: 一、setAdapter与addHeaderView语句的调用顺序有啥要求吗? 答:有要求。要求先addHeaderView然后才能setAdapter。否则在sdk 4.2版本的机器上就会崩掉。出现如下错误:java.lang.IllegalStateException:Cannot add header view to lis原创 2017-06-24 16:11:30 · 359 阅读 · 0 评论 -
Android中常用的正则表达式(持续补充中)
参考:Android中的正则表达式语法 项目实践: 1.高亮文本中数字部分 例如要展示:附近有200+个工作机会 如果红色部分的数字是可变的,但是在页面中没有其他用途,那么在与Server端制定接口协议时,这句话就可以当做一个字段返回,红色效果由APP这边来实现。代码如下: tv_near = (TextView)findViewById(R.id.tv_near);原创 2017-06-16 12:00:07 · 431 阅读 · 0 评论 -
[笔记]Android Apk Java签名的含义
Android App中的Java签名指的是啥?听了同事的分享及查阅相关文章,目前的理解是:1.Java签名文件里包含着一对RSA的公钥和私钥;2.打包签名过程中,打包脚本使用私钥对生成的CERT.SF进行RSA加密;然后将加密结果和公钥保存在CERT.RSA中;(CERT.SF、CERT.RSA文件位于Apk包中META-INF目录下)3.创建Java签名文件时,会让我们填写St原创 2016-06-28 20:26:25 · 977 阅读 · 0 评论 -
[笔记]Android系统进程Zygote启动过程的理解
读老罗的文章:Android系统进程Zygote启动过程的源代码分析,根据流程整理成如下图:感悟:1.对linux的进程fork原理迫切地想完整了解下。从行文中知道,zygote在执行了forkSystemServer语句后,就会fork出SystemServer进程,然后forkSystemServer语句之后的语句,就是在子进程即SystemServer进程里执行的了,有点不可思议原创 2016-12-22 19:06:39 · 484 阅读 · 0 评论 -
[笔记]静态广播与动态广播的差别
参考:http://weishu.me/2016/04/12/understand-plugin-framework-receiver/一切差别都源于注册的方式的不同:1.注册过程不同,静态广播需要在AndroidManifest.xml中注册,并且注册的信息存储在PMS(Package Manager Service)中;动态广播通过Context提供的方法在代码中注册,注册的信息存储在原创 2016-09-23 11:32:17 · 538 阅读 · 0 评论 -
Android的UI主线程是ActivityThread吗?
Android的UI主线程是ActivityThread吗?这是个从来没反思过的问题。 总结一下,回答应该是:严格来说,不是的。ActivityThread类是Android APP进程的初始类,它的main函数是这个APP进程的入口。APP进程中UI事件的执行代码段都是由ActivityThread提供的。也就是说,Main Thread实例是存在的,只是创建它的代码我们不可见。Activity原创 2017-04-21 20:01:16 · 2135 阅读 · 0 评论 -
实例跟读ListView复用原理
关于ListView复用机制的,现总结如下: 1.ListView的复用是通过内部类RecycleBin来实现的; 2.RecycleBin会为每种ItemType最多保留一屏幕的View,本文中的例子,是11个,慢慢滑动时会是12个。这取决于ItemView的高度、ListView的最大高度,以及数据源的条数。 3.RecycleBin中复用机制只在同一种ItemType中进行。负责复用存储原创 2017-04-20 15:50:51 · 398 阅读 · 0 评论 -
图解Google官方示例的各种android框架
Goolge官方的Android框架源码见:GitHub工程; 毋庸置疑,官方给出的框架示例应该是最标准也最具有普适性的。本文根据工程中的示例,画出了各个框架的架构图,以方便快速学习和了解。 1。常见的MVC框架如下图所示:框架-mvc 2.常见的MVP框架如下图所示:框架-mvp 3.在MVP框架基础上,通过LoaderManager实现异步获取数据的框架:框架-mvp-loade原创 2017-04-05 18:04:26 · 4429 阅读 · 0 评论 -
减小Apk包大小的常用方法
我们之所以要减小apk的大小,一方面是为了节省用户手机的内存;另一方面是为了节省用户在App安装和版本升级时的流量;直接减小apk文件大小的方法:1.使用图片压缩工具;目前常用的工具是:ImageOptim,压缩效果很好,使用默认配置即可。但是仅有MAC版的;2.删除无用的资源文件以及代码;在Eclipse开发环境下通过Android Lint工具可以找出项目中无用的资源及原创 2016-06-23 20:26:29 · 3655 阅读 · 0 评论 -
自定义的Java对象转JSON串的方法
开发过程中有个api需求,就是将最终提交的数据,转成json字符串,作为一个参数传递给服务器。这个要传递的数据结构如下:public ArrayList tagJson;其中,每条数据PtEvaluateItemBean的数据结构如下:public class PtEvaluateItemBean { public int tagid; public Strin原创 2016-11-11 10:44:08 · 6466 阅读 · 0 评论 -
Android源码在线查看
Android源码在线查看的网址有:1.GrepCode:http://grepcode.com/2.AndroidXref:http://androidxref.com原创 2016-09-22 13:29:06 · 316 阅读 · 0 评论 -
[插件]目前主要的开源插件方案
下表表格是目前主要的插件化解决方案,其中360的DroidPlugin方案是最为完美的,但是也很复杂。在使用时可以适度简化。其他的方案虽然多少都有点瑕疵,但是对于多角度理解android框架是有帮助的,同时也能活跃思维。原创 2016-09-08 20:29:40 · 990 阅读 · 0 评论 -
[Android Design Lib]CoordinatorLayout源码分析
这里首先要介绍几个角色类:1.接口NestedScrollingParent,其方法有:2.内部类CoordinatorLayout$Behavior,其原型为:public static abstract class BehaviorV extends View>是一个抽象类,主要的方法有:可以看到,抽象类CoordinatorLayout$Behav原创 2016-09-06 19:28:29 · 737 阅读 · 0 评论 -
[笔记]Activity启动模式
在公司内部每周分享会上听到的总结,用自己的话再写一遍,算是加深记忆了。Activity是Android的四大组件之一,Activity的启动模式也是必须要掌握的基础知识之一。Activity的启动模式有4种:standard,singleTop,singleTask,singleInstance,默认方式是standard。一、设置模式可以通过在manifest里配置也可以通过Inte原创 2016-12-06 18:44:19 · 355 阅读 · 0 评论 -
[笔记]ContentProvider的插件化的理解
目前在研读田维术的系列文章《Android插件化原理解析》,http://weishu.me/2016/01/28/understand-plugin-framework-overview/本文写一下Android插件化原理解析——ContentProvider的插件化的读后感和理解.1.ContentProvider的工作流程图:2.ContentProvider的插件化实现方法原创 2016-12-19 21:23:32 · 841 阅读 · 0 评论 -
获取Android应用名称的方法
如何获取APP的名称?网上找到的方法是: public static String getAppName(Context context) { if (context == null) { return null; } try { PackageManager packageManager = context.getPackageManager(...原创 2019-08-05 18:04:37 · 9429 阅读 · 0 评论 -
海神平台Crash监控SDK(Android)开发经验总结
海神平台是我们自主研发的一个移动端质量监控平台,从去年7月份开始至今,已陆续上线了Crash监控、ANR监控、网络监控、自定义错误等功能,目前已接入了公司内近10款APP(不区分Android和iOS平台)。本文将主要分享Android端在开发Crash监控SDK过程中的一些实践和经验。希望大家能有所收获。一、Java层异常捕获系统提供了一个钩子:Thread.setDefaultUncau...原创 2019-07-09 16:02:17 · 1479 阅读 · 0 评论 -
如何解析没有Body体的Response
在开发过程中遇到一个问题:后端API返回的Response里没有Body,API成功与否是根据HTTP的status来表示的。那么APP端如何处理呢?如果使用的是Retrofit网络库,则将返回体置为“Void”即可。同步和异步的方法声明示例如下: @POST Call<Void> syncApi(@Url String url, @HeaderMap Map<...原创 2019-07-09 15:57:11 · 1468 阅读 · 0 评论 -
小米手机上微信双开-初窥
在小米手机上,通过在设置页面,输入“应用双开”,可以进入APP分身的列表页面。列表中出现的是手机支持分身的APP,切换开关,即可开始分身。 选中微信进行分身后,桌面上出现了第二个有角标的微信。点开后使用,与本尊APP无差别。 但是通过adb命令调用微信的页面,发现打开的都是本尊微信,分身的微信无法被调用。 使用cmd命令查看,发现如下差别:shell@rolex:/ $ ps |gr...原创 2018-05-15 11:37:20 · 3128 阅读 · 1 评论 -
uiautomator使用总结
uiautomator是Android提供的一个UI自动化测试框架,一般与AndroidJUnit4单元测试框架配合使用。一、首先我们来编写一个demo:1.目录结构使用Android Studio创建新的project时,在app/src/目录下会自动创建三个子目录: androidTest、main、test。 如上图所示,我们将在androidTest目录下编写测...原创 2018-04-03 15:26:08 · 4554 阅读 · 0 评论 -
APP版微信机器人技术方案详解
GitHub上有很多关于微信机器人的实现版本,这里讲一下如何在安卓手机上实现一个微信聊天机器人。思路大致都是一样的,突破口都是调用微信的网页版的接口,进行网页登录,进而获取到微信里的聊天内容,然后调用聊天发送接口将内容发送给微信。一、网页版的接口大致分为五类: 1.登录相关;接口jslogin、qrcode、webwxnewloginpage、webwxlogout 2.初始化相关;接口:web原创 2018-01-03 21:33:55 · 11046 阅读 · 1 评论 -
ListView item被多次重绘的原因是啥
ListView item被多次重绘的原因,经验证,与ListView自身的layout宽高有关: android:layout_width="match_parent" android:layout_height="match_parent"如果可以,请将其宽高都设置为match_parent。,则会极大地减少item的重绘次数,理想情况下是1次。试验中原创 2016-10-28 16:39:09 · 1676 阅读 · 0 评论 -
电话挂断后进入新页面的实现
1.首先要侦听电话状态,步骤如下:1.1 manifest中申请权限:1.2 注册广播侦听系统广播消息“android.intent.action.PHONE_STATE",这里注册动态广播为例,filter写法如下: IntentFilter mPhoneFilter = new IntentFilter(); mPhoneFilter.addAct原创 2016-11-19 19:30:36 · 864 阅读 · 0 评论 -
Android图片压缩的代码实现
参考文章:http://www.codeceo.com/article/android-image-compression.html在App开发过程中,免不了要上传图片到Server端。考虑到大图片带来的请求时长及传输失败风险,通常情况下都会对图片进行压缩处理后再上传。目前常用的两种压缩方式是:1.通过降低图片质量;2.通过减小图片分辨率;详见开篇提到的参考文章。这里再补充一下实现原创 2016-11-28 10:41:03 · 710 阅读 · 0 评论 -
Android Dialog用法大全
Dialog是Android中使用非常频繁的一个控件。下面是对它的一些使用总结。1.如何创建一个四角是圆角的对话框?2.如何将整个背景设置为透明效果?3.注意事项原创 2016-12-17 15:26:09 · 548 阅读 · 0 评论 -
Android EditText用法大全
EditText是Android的基本控件之一,使用频率非常之高。常见使用问题有:1.如何让EditText不可编辑?这常见于首页的搜索框。点击搜索框后才真正跳转到搜索页面,而此时的搜索框是不可输入的。办法:在布局里将其focusAble设置为false。如: <EditText android:id="@+id/et_mo原创 2016-12-17 18:29:13 · 1204 阅读 · 0 评论 -
Android中常见的Hybrid实现方法
在APP开发过程中,不可避免会遇到html与native进行交互的情况。比如,在微信公众号里看到一篇运营文章,或者在朋友圈点开某条分享的链接,在打开的页面上,文末一般都会有一些引导性的操作。点击这些按钮,往往都会将对应的APP打开并直接进入相关页面。这个体验很令人惊喜,是吗?再或者,在APP里,点击运营活动的内容或者一些广告,在打开的页面上也有类似的引导操作。这时,点击这些操作,也会像一般的页原创 2016-12-20 18:14:43 · 1595 阅读 · 0 评论 -
[笔记]Android应用程序进程启动过程的理解
读老罗的Android应用程序进程启动过程的源代码分析,根据理解和重点印象,整理出如下一图:疑问:1.Process.fork是啥意思?类似new吗?2.接着1问,新APP进程和ActivityThread类是怎么关联起来的?是zygote进程调用执行的ActivityThread类的main方法,怎么就运行在了新APP进程中?3.UI主线程是啥时候创建的?ActivityTh原创 2016-12-22 14:09:51 · 409 阅读 · 0 评论 -
如何将Android开发进行到底
做技术的不外乎有两种选择:1.做全才;2.做专才。这两年,关于App开发的技术书籍、公众号、网络文章越来越多;一个月精通xxx开发的广告也是越来越多。新人准入的门槛也是越来越低。做了3年甚至6年以上App开发的你,如果还在一线开发之列,不由得会惶恐起来。晋升管理之位尚且无门的话,如果还怀有做Android开发的热情,为了平复内心,你不妨按照下面说的试试看:1.选择CSDN、简书、GitHu原创 2016-09-18 11:12:10 · 599 阅读 · 0 评论 -
[Android Design Lib]Snackbar学习
参考文章:http://www.open-open.com/lib/view/open1433496206666.htmlSnackbar是Toast的升级版,与Toast相比,它额外提供了show和dismiss的判断方法和回调接口。另外,它还提供了增加Button点击的机会,为我们省去了一些需要自定义view才能实现的类似Toast展示效果的提示浮层的工作。1.首先,引入Android原创 2016-08-30 20:43:46 · 356 阅读 · 0 评论 -
App开发常用的抓包工具和Web网络请求工具
一、 Charles,可以方便地在电脑上查看手机端的网络请求,如果你还在费老大劲地root手机、复制dump文件到手机的话,强烈建议你使用Charles试试。下载地址:http://www.charlesproxy.com/download/工具介绍可以参考:http://www.2cto.com/Article/201406/310928.htmlCharlesV3.10.1版本的破解包见:http://download.csdn.net/detail/chwnpp2/8557963原创 2015-03-27 18:51:17 · 2427 阅读 · 0 评论 -
RSA加密在移动端与服务器通信中的应用
由于项目需要,客户端在与服务端通信时,一些关键信息不能通过明文传输,需要将其进行加密,以防他人通过抓包工具截获业务通信信息后,从中捣乱。设计思路是使用RSA加密。服务端生成RSA的密钥对;将公钥发给客户端;客户端使用该公钥对关键信息进行加密后,再将关键信息发送给服务器;服务器收到关键信息后,使用私钥进行解密,然后通过甄别解密后的关键信息,从而判定是否是真实有效的客户端用户。原创 2015-04-23 11:30:04 · 4218 阅读 · 0 评论 -
MAC上Eclipse安装SVN插件
解决办法总结成一句话就是:XCode-->MacPorts-->JavaHL-->SVN。原创 2015-03-24 11:47:03 · 529 阅读 · 0 评论 -
MAC连接安卓手机安装apk
安卓的apk可以通过adb命令来安装。在MAC电脑上,如果想通过命令行的方式给安卓手机安装apk,需要做以下操作;一句话概括就是:将安卓SDK的adb命令添加到环境变量中,然后通过adb install方式将apk从电脑上安装到手机中。具体操作如下:1、点击Finder,右键选择“前往文件夹”,输入“/etc”,在“操作”中选择“显示简介”,将everyone的权限由只读改为读写(具体方法:点击简介界面右下角的锁原创 2015-03-30 21:10:59 · 4603 阅读 · 2 评论 -
TextView文字加下划线的方法
1. 最简单的方式就是通过修改TextView的字符串值,即在string里添加关键字:手机注册2.在代码里通过SpannableString方式: TextView regPhoneTextView; ..... String regPhoneTxt = getString(R.string.register_by_phone);转载 2015-03-23 16:44:01 · 964 阅读 · 0 评论