avatar
文章
95
标签
15
分类
0

Home
Archives
Tags
Gallery
About
Pig Cat
Search
Home
Archives
Tags
Gallery
About

Pig Cat

Ubuntu安装Source Insight导入Android源码并设置仿IDEA主题Darcula
发表于2019-08-16|Android•AOSP•鼓捣折腾•Linux
预览先来张图给大家感受下效果,然后我再慢慢道来过程,保证你避免每一步的坑。 我们要做什么1、由于Source Insight(以下简称SI)是Windows应用,所以不能直接安装在Linux上,于是我们要借助wine,所以第一步会介绍wine的安装过程和坑;2、介绍SI在Linux(以Ubuntu 16.04为例)上的安装,并介绍如何导入免费证书(个人建议大家有条件还是付费支持一下SI这个软件,真的是个好东西,比IDEA看源码实在快太多了,我已经买了最新版4.0,还是挺良心的,一次性付费,239美刀);3、用SI导入AOSP源码并Sync文件建立索引,开头那张截图就是正在Sync,建立完成后就可以快速导航各个方法类引用等等了;4、默认主题太刺眼,怎么办?还是习惯IDEA的风格,没事,我配置都写好了,只用你一键导入并改改字体大小即可! 第一步:安装wine直接命令走起: 1sudo apt-get install wine 过程中终端会显示一个确定页面,按Tab键选中并确定即可,然后再选“是”。一般来说由于依赖问题,上述命令都是不能一次性安装成功的,这时候直接: 1sudo apt-ge ...
Kotlin操作符快速获取爸爸的儿子的狗的名字
发表于2019-08-01|Android•Kotlin
NPE(NullPointerException)是最低级且也最容易犯的错,也是最喜欢遇到的Bug因为好解。本文适合Kotlin入门萌新食用,大佬轻喷哈哈哈! 问号N连帮你空处理(?)假如服务端返回一个json嵌套了各种数据,映射成POJO大概是这样: 123456789101112// 此处为简洁省去getter和setterpublic class TestParent { private TestChild child; public class TestChild { private List<TestDog> dogs; public class TestDog { private String name; } }} 然后,你为了知道他爸的儿子的第一条狗叫啥名,你需要这样: 123456789101112if (parent != null) { // 有爹 TestParent.TestChild ch ...
OkHttp拦截器实现禁止一切网络请求
发表于2019-07-06|Android
我们在创建OkHttp客户端时,可以添加各种拦截器,这是我见过最有可玩性的库之一: 123456OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .addInterceptor(new XXXInterceptor()) .addInterceptor(new YYYInterceptor()) .... .build(); 设想这么一个场景,用户有一个开关,可以允许或禁止应用内的一切网络请求,如何用拦截器来实现?为了不让大家觉得我又在水贴,直入主题。我们可以通过构造一个404的response来拦截请求: 12345678910111213141516private static class NetworkInterceptor implements Interceptor { @Override public okhttp3.Response interc ...
OkHttp拦截器实现无网络时加载缓存,避免Unknown host异常
发表于2019-07-05|Android
我们在创建OkHttp客户端时,可以添加接口数据缓存,真的很香: 123456File cacheDir = ... // 缓存目录,可以是内部存储也可以是外部存储的目录OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .cache(new Cache(cacheDir, 20 * 1024 * 1024)) // 这里给了20MB缓存目录容量,超过后会自动清理 .... .build(); 然后我们会发现,先正常请求网络数据,然后断开网络连接,重新请求,并没有返回缓存。而是出现一些诸如“Unknown host…”解析不了域名这种异常,查看之前设置的缓存文件目录,也确实有文件,可怎么就不加载呢?哦,结果还要配置一下缓存策略,回到我们的主题:拦截器。我们可以在拦截器中实现网络连接判断并强制开起缓存: 12345678910111213141516private static class Cach ...
OkHttp拦截器获取GET/POST请求参数并添加公共参数
发表于2019-07-05|Android
我们在创建OkHttp客户端时,可以添加各种拦截器,真的很香: 123456OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .addInterceptor(new XXXInterceptor()) .addInterceptor(new YYYInterceptor()) .... .build(); 服务端经常需要我们做一些参数校验的工作,需要在本地先把请求参数封装起来再加密之类的,那么我们可以用拦截器来实现获取所有get或post参数,还可以添加一些公共参数,这样就不用在每个接口定义那去加了: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354private static class ParamsInterceptor impl ...
微信小程序任务栈实现原理
发表于2019-04-27|Android•前端
背景之前面试一些校招同学,聊到微信小程序是什么launchMode,其任务栈是如何实现的?很多同学只提到singleInstance,这是不合适的。今天我们就猜测并解析一下微信主程序与小程序的关系与大致实现,最后给出源码,可以给大家作一个简单参考。 初探既然要研究微信,那么我们就先打开几个小程序,再用adb命令看看任务栈信息。在终端使用 adb shell dumpsys activity activities 命令后,可以找到最近任务列表的Activity信息: 12345678910Running activities (most recent first): TaskRecord{caccd90 #3239 A=.AppBrandUI3 U=0 StackId=1 sz=1} Run #4: ActivityRecord{bb162b8 u0 com.tencent.mm/.plugin.appbrand.ui.AppBrandUI3 t3239} TaskRecord{d6c62d6 #3190 A=com.tence ...
NDK开发中为什么除以0程序不崩溃?
发表于2019-04-15|问题不大•Android
我们都知道不管是在Java还是在C++程序中,下面这段代码都会导致程序错误: 123int x = 10;int y = x / 0;... 但是我今天发现了一个比较神奇的事情,把这段代码写成native方法后在Java层调用,竟然没有导致App崩溃,代码是这样子的: 12345678910111213141516#include <jni.h>#include "logger.h"#ifdef __cplusplusextern "C" {#endifJNIEXPORT void JNICALL test_crash(JNIEnv *env, jobject /* this */) { int x = 10; int y = x / 0; LOGD("crash %d", y);}#ifdef __cplusplus}#endif Java层很简单,我保证没有try-catch,而且Log打印出来y的值竟然是0,这完全颠覆我三观。怀疑人生的我把这两行关 ...
源码茶舍之android:externalService是什么属性?实现原理?
发表于2019-04-10|Android•AOSP
发现在AndroidManifest中声明Service时,偶然发现一个布尔类型的属性:android:externalService示例如下: 123<service android:externalService="true" ... /> 如果minSDK小于24,会显示警告,很显然这是一个24以后的新东西。先顾名思义一下,external的service,外置(外挂)的服务?它和 android:exported 以及 android:isolatedProcess 属性是什么关系? 初探先谷歌一下,再百度一下,无果。竟然没有一个人解释这是什么东西,这更加激发了我的好奇心。马上去Android官网搜,搜到service标签的文档,心中窃喜:https://developer.android.com/guide/topics/manifest/service-element翻完整个文档,发现居然也没有 android:externalService 的说明,难道是太新了忘了补充文档吗?不过我们可以从中先复习一下 android:exp ...
MyBatis中插入(insert)后返回主键(key)的注解方式
发表于2019-03-17|Java•后端
一般我们插入数据后需要知道其自增的主键key是多少,有两种方式: 用@Options注解:比如这里有个订单(Order)相关的DAO: 12345public interface OrderDao { @Insert("INSERT INTO ...") @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") void insertOrder(Order order);} 这里的keyProperty表示对象中的成员变量,keyColumn表示数据库中的列名,因此我们这里数据库主键名称就是id ,其实此处不写keyColumn也是可以的,因为我们只是读不是写。此外,如果你Order实体中主键名称就叫”id”的话,keyProperty也不用写了。实体类则如下: 1234public class Order { private long id; ...} 最后通过 orde ...
MyBatis直接使用LocalDateTime时间类型以及MySQL时区问题排错
发表于2019-03-15|问题不大•Java•后端
时间类型Java 8提供了新的时间API,相关介绍大家可以自行搜索或者直接参考这篇Java中的时间与时区,因此大家在写实体类时,可以放弃用以前的Date或者Timestamp类型了,直接用LocalDateTime类就行了,MyBatis从3.4.5版本开始就完全支持这种类型了,根本不用自己再去写什么类型转换,目前网上搜到的大部分文章还是让我们自己去实现,其实不用的。 我们来看看其官方文档( https://github.com/mybatis/mybatis-3/releases ): mybatis-3.4.5@harawata harawata released this on 20 Aug 2017 · 472 commits to master since this releaseEnhancements:Make default enum type handler customizable. #971Make mapper method and its interface type accessible to SqlProvider. #1055Allow using c ...
授权后连接MySQL依然被拒绝访问(Access denied for user 'root'@'localhost')
发表于2019-03-09|问题不大•Java•后端
我们在Spring Boot的应用配置中一般都会如下: 1jdbc:mysql://123.123.123.123:3306/db_name?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true 123.123.123.123是MySQL数据库所在主机的IP地址,如果你想要远程访问数据库,就必须授权,一般这样操作: 12GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '12345' WITH GRANT OPTION;FLUSH PRIVILEGES; 12345是你设置的访问密码。但有时候我们轻量应用服务都是单机的,根本不用远程访问,也就是说上面的配置我会这样写: 1jdbc:mysql://localhost:3306/byd?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true 然后查看 ...
源码茶舍之由一次简单的ANR分析深入了解Context
发表于2019-02-23|Android•AOSP
ANR是Android的老大难了,关于这方面的基础知识和深入好文都非常多,大家不妨谷歌一下。最近搭载骁龙855的小米9也发布了,移动平台的设备性能越来越强,许多App大多时候其实都吃不完那么多计算资源。说得可能不好听一点,很多烂代码要是在很多年前的手机上,本该导致卡顿(甚至是ANR)的,但由于如今强大的计算性能,卡顿几率大大减小了。从某方面来说增大了程序的容错,同时也掩盖了程序本身的缺陷。 今天的题目关键词是“简单分析”和“深入了解”,哈哈,可能对于大佬们来说这些内容并不深入,所以我措辞为“了解”,望轻喷。 分析traces文件前段时间,业务质量平台报上来很多ANR,我是一看就头疼呀!每次心里都犯嘀咕,我怎么就从来没遇到ANR呢?你们到底是怎么使用的。吐槽归吐槽,问题还是要解决的,Android的系统日志打包上来一般都会有traces.txt文件(还有event log等等,这里给大家硬广一下我另一篇使用可视化的ChkBugreport分析log文件),也是我们分析这类问题的入口,里面记录了各个应用进程和系统进程的函数堆栈信息。于是乎,抓一份来瞧瞧: 123456789101112 ...
Glide4.8集成现有OkHttpClient并加载https图片
发表于2018-12-18|Android
转眼间谷歌的Glide图片加载库都4.8.0了,时间过得真的太快。今天解决两个问题(第1个是独立问题,第2个依赖第1个):1、Glide网络加载库(其默认为原生的API实现)集成为OkHttp,众所周知OkHttp可以帮助我们更方便地玩转网络请求;2、让Glide可以加载https前缀的图片链接(如果你的域名证书是服务端自己瞎签的,没有认证,就过不了安全检查,表现为你用Chrome浏览器打开这个链接会提示不安全的红色警告)。 问题1:集成OkHttp一般来说我们项目一开始会分别使用Glide和OkHttp库,没特殊需求时没想到过它们还要结合。首先,假设我们已经有OkHttpClient的初始化逻辑了: 12345678// 简化示意的初始化代码public static OkHttpClient getHttpClient() { OkHttpClient.Builder builder = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .ad ...
RxJava2开发小记:先加载缓存再请求网络之简单实现
发表于2018-12-10|Android•Java
关于缓存用户角度:做客户端,大部分时候都在追求良好的用户体验,缓存,就要达到一个缓兵之计的效果。因为用户永远是“暴躁”的,页面加载要是有缓存先展示出来,用户就会安心很多。这是一种视觉上的舒服,大多数用户并不在乎这个数据从哪来。开发者角度:对于客户端程序来说,网络状况是未知而不稳定的,在耗时上面,一次网络请求可能大于本地数据读取好几个数量级。并且,某些及时性不高的数据,并不需要每次都从服务端请求,而是按过期时间来判断是否需要更新缓存,这样也能尽可能地减轻服务器压力。 总结一下上面的开篇废话就是,用户是暴躁的,服务器是脆弱的,唯一坚挺并且逆来顺受的就是客户端了哈哈哈! 正文目标望闻问切四部曲:UI层发起数据获取意愿(望),打听是否能加载缓存(闻),再访问网络进行远程请求(问),最后刷新缓存至本地存储并返回数据给UI层(切)。药材读缓存的Observable一个(localDataObservable)请求网络数据的Observable一个(remoteDataObservable)关键性的串联操作符contact一个上药 12345678910111213141516// 闻:本地缓存Ob ...
RxJava2开发小记:用CompositeDisposable来“安排”Retrofit网络请求
发表于2018-12-09|Android•Java
情景前不久项目遇到了偶现的OOM问题,看调用栈发现有RxJava相关,我们项目以RxJava2+RxAndroid+Retrofit2+OkHttp为基础设施的。上谷歌搜了一转,最终竟踏入了RxAndroid的GitHub issue区,发现有个老外和我情景类似,原帖链接在此:https://github.com/ReactiveX/RxAndroid/issues/387, 他说他只用Retrofit发起1500个请求没毛病,但是加上RxAndroid就炸了,他怀疑RxAndroid有Bug。这个问题被项目Owner(即JakeWharton大神)回复了,他给大家解释了这种框架组合的正确用法。下面是他的原话: The problem is that Schedulers.io() uses a cached thread pool without a limit and thus is trying to create 1500 threads. You should consider using a Scheduler that has a fixed limit of thre ...
1…567
avatar
YSY
Full-Stack, Android, AI
文章
95
标签
15
分类
0
Follow Me
随缘支持

移动端点击二维码亦可

Paypal.me if you like

最新文章
解决Android Studio查找aar源码的错误2025-09-03
如何在Ubuntu上自建S3服务2025-01-23
如何用crontab和mail定时发邮件2024-12-20
如何禁用网站目录访问(Apache)2024-09-25
Levenshtein编辑距离算法初体验2024-08-26
标签
问题不大AndroidAOSPJava后端Kotlin前端鼓捣折腾LinuxGradleWindowsAImacOS算法Rust
归档
  • 九月 20251
  • 一月 20251
  • 十二月 20241
  • 九月 20241
  • 八月 20245
  • 三月 20243
  • 八月 20231
  • 七月 20232
网站资讯
文章数目 :
95
已运行时间 :
本站访客数 :
本站总访问量 :
最后更新时间 :
©2018 - 2025 By YSY
Welcome To My Blog!
Search
数据库加载中