DiskLruCache 的使用及源码解析 DiskLruCache 用于实现存储设备缓存,即磁盘缓存,它通过将缓存对象写入文件系统从而实现缓存的效果。DiskLruCache 得到了 Android 官方文档的推荐,但它不属于 Android SDK 的一部分,它的源码及网址文末会贴出来。下面分别从 DiskLruCache 的创建、缓存查找和缓存添加这三个方面来介绍 DiskLruCache 的使用方式。
LruCache 的使用及源码解析 常用的三级缓存主要是指 LruCache、DiskLruCache、网络,其中 LruCache 对应内存缓存、DiskLruCache 对应磁盘缓存。LRU 全称是 Least Recently Used,即最近最少使用策略,意思是当缓存到达限制时候,优先淘汰近期内最少使用的缓存,LruCache 和 DiskLruCache 都是采用 LRU 策略。比如说 Android 中常来缓存 Bitmap,我们先从 LruCache 中取,取不到再从 DiskLruCache 中取,也取不到的话,最后才从数据源
Java 中的 String、StringBuilder、StringBuffer 的区别 一、是什么?String 不可变字符序列String 是字符串常量,其对象一旦创建之后该对象是不可更改的, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成新对象都会开辟新的内存空间,不仅占用大量内存空间,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度一定是相当慢的,对系统性能产生影响。String 这个类很特殊,特殊在于
用 adb 命令直接安装 apk 到手机 1)、用数据线连接 Mac 和手机;2)、打开终端,进入 apk 所在目录下cd /Users/Chitty/workspace/ProjectName/app/build/outputs/apk/ceshi/release/3)、在终端执行adb install ceshi-release-1.0.0.apk...
master 分支强制回退 前提是 去 GitLab 的 Settings - Repository - Protected Branches -unprojectgit reset --hard 4a5b7f5bgit push -f origin master
Android Studio下 获取 应用签名以及 MD5、SHA1(签名)、SHA256 值 的命令 keytool -v -list -keystore /Users/Chitty/workspace/BookBlue/tina.jks
app:preDebugAndroidTestBuild Android Gradle 报错: Error:Execution failed for task ‘:app:preDebugAndroidTestBuild’. Conflict with dependency ‘com.android.support:support-annotations’ in project ‘:app’. Resolved versions for a...
解决 ScrollView.setOnScrollChangeListener() API 23 及以上可用的限制问题 1、自定义一个类继承 ScrollViewpackage com.chitty.views;import android.content.Context;import android.util.AttributeSet;import android.widget.ScrollView;/** * scrollview 滑动控制高度 * Created by Chitty o...
Android Studio 编译时提示 Error: Please select android sdk. 编译运行项目时报错如下:Error: Please select android sdk.在 app.iml 文件中 检查以下代码是否存在,不存在则添加上,即可正常运行。
升级到 Android Studio 3.0 + Gradle 4.1 遇到的一些坑及解决方案 问题一:Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=commonDebug, filters=[]}} of type com.android.build.gradle.internal.api.A
Android 应用获取通知栏权限 工具类 NotificationsUtils:package com.xxx.ua.utils;import android.annotation.SuppressLint;import android.app.AppOpsManager;import android.content.Context;import android.content.pm.ApplicationInfo;impor
Retrofit response 回调封装 Retrofit response 回调封装:import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.text.TextUtils;import com.hyphen
Error:No such property: GROUP for class: org.gradle.api.publication.maven.internal.deployer.DefaultG 问题:在 Android Studio 项目中导入从 Github 上下载的 module 后,会报这个错:Error:No such property: GROUP for class: org.gradle.api.publication.maven.internal.deployer.DefaultGroovyMavenDeployer解决方案:在导入的 module 的 build.grad
Error:Plugin with id 'com.github.dcendents.android-maven' not found. BUG:Error:Plugin with id 'com.github.dcendents.android-maven' not found.解决方案: 在 Project 下的 build.gradle 里添加全局依赖://1.自动化maven打包插件 classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'//2.自动
okhttp3.internal.http2.StreamResetException: stream was reset: INTERNAL_ERROR BUG:okhttp3.internal.http2.StreamResetException: stream was reset: INTERNAL_ERROR原因是协议错误导致的,在实例化 okhttpclient 的时候用以下方法:okHttpClient = httpBuilder .protocols(Collections.singletonList(Pro
Android 各大手机品牌手机跳转到权限管理界面 感谢分享概述最近项目中遇到这样个需求场景: 当我们的用户使用App时不小心拒绝了某项必要权限,而导致无法正常使用。这时候希望重新去打开该权限,那么问题来了,Android厂家定制的room五花八门,很多时候却发现找不到权限管理的入口。为了解决这一问题,如果我们应用中直接提供权限管理入口给用户,是不是会很方便的解决用户这一困扰呢?经过一番研究,整理出了大部分国产手机直接打开权限管理界面的方法:华为I
module 的几种依赖方式的区别 module 的几种依赖方式的区别compilecompile 是对所有的 build type 以及 flavor 都会参与编译并且打包到最终的 apk 文件中。ProvidedProvided 是对所有的 build type 以及 flavor 只在编译时使用,类似eclipse 中的 external-libs ,只参与编译,不打包到最终 apk。APK只会打包到 apk 文件中,而不参与编
com.android.build.api.transform.TransformException 因为项目做了自动化,故 “加固 apk“ 自然也要写入脚本,实现自动化 “构建、加固、重命名、登录 fir.im 、上传 apk“ 等一系列流程:今天在给项目增加 “腾讯乐固“ 的 leguapi.jar 后,构建、打 release 包时,发生 error 如下:错误信息:Error:Execution failed for task ':xxx:transformClassesWithJar
加固和混淆 1 什么是代码混淆代码混淆通常将代码中的各种元素(变量、函数、类名等)改为无意义的名字,使得阅读的人无法通过名称猜测其用途,增大反编译者的理解难度。虽然代码混淆可以提高反编译的门槛,但是对开发者本身也增大了调试除错的难度。开发人员通常需要保留原始未混淆代码用于调试。2 代码混淆就安全了么代码混淆并不能从根本上阻止反编译等。因为代码混淆仅仅提高了阅读难度,但并不能真正阻止反编译。因此,对于高安全要
重写滑动监听的 WebView package com.chitty.views;import android.content.Context;import android.util.AttributeSet;import android.webkit.WebView;/** * Created by chitty on 2017/8/29. * 重写滑动监听的 WebView */public class NewWe
Can't create handler inside thread that has not called Looper.prepare() 问题:Can't create handler inside thread that has not called Looper.prepare()情景:若在一个 Thread 中启动了一个 ProgressDialog 提示正在连接(即防假死),然后在 Handler 中 dismiss() 这个 ProgressDialog,若有错误信息则在线程中调用 Toast 提示,然后当程序运行到 Toa
PopupWindow 适配 Android 7.0 、7.1 「问题描述」:正常显示: 显示错位: 「解决方案」:package com.chitty.views;import android.graphics.Rect;import android.os.Build;import android.view.View;import android.widget.PopupWindow;/** * Created by chitty on 2017/
延迟的几种方式 int delay = 1000;// 假设 1 秒的延迟一、线程 Thread new Thread(new Runnable(){ public void run(){ Thread.sleep(delay); handler.sendMessage();----通知主线程执行任务 } }).sta
android 6.0 以上版本不显示按钮文字 经检查,原因是在 style.xml 中 <item name="colorAccent">@color/white</item>将 颜色改为非白色即可见: <item name="colorAccent">@color/green</item>解决方案 so easy ,排查起来还是不那么 easy .P.S. AppTheme 中的各个变量对应的内容
retrofit 2.0 如何通过 HttpLoggingInterceptor 打印服务器响应的 json ? 使用 Retrofit 网络请求框架,首先要在 app 的 build.gradle 下添加如下依赖:compile 'com.squareup.retrofit2:retrofit:2.3.0'compile 'com.squareup.retrofit2:converter-gson:2.3.0'然后,创建一个 OkHttp3Utils 工具类:import android.content.C
Android 通过 localstorage 向 HTML5 传参 现在的 APP,Android 与 H5 混合开发已很常见。当 Android 通过 WebView 加载 H5 页面,且需要向其传参时,可以用 loaclstorage 来实现。代码如下: WebView 先要设置如下属性: webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setApp
WebView 中 H5 页面的软键盘遮挡输入框 如题,WebView 中 H5 页面的软键盘遮挡输入框,于是在 AndroidManifest.xml 中该 Activity 中 添加如下代码:android:windowSoftInputMode="stateAlwaysHidden|adjustResize"但,无效。然后试了 adjustPan | stateHidden | adjustResize 等各种组合均无效。最终,在 setCo
Could not find any matches for com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+ as no version Long long ago , 项目中用到了微信分享,我是直接集成了微信的 sdk (没有用友盟的微信分享),之前做这一功能的时候,按照微信的官方文档做的,没有问题,也测试 OK 了,很顺利; 但是,今天运行项目的时候,Android Studio 突然抛出一个 bug,如下:Error:A problem occurred configuring project ':app'.> Could
TortoiseSVN 客户端与 Android Studio 关联的二三事 一、TortoiseSVN 客户端无法与 Android Studio 关联的解决办法今天重装了一下 TortoiseSVN_1.9.5.27581_x64 客户端,安装好后,打开 Android Studio -> File ->Settings -> Version Control 发现没有 Subversion,如下图 于是,思考并查找解决办法,如下: 在 File->Settings-
Error:Execution failed for task ':app:transformClassesWithDexForDebug'. 一、错误信息如下:Error:Execution failed for task ':app:transformClassesWithDexForDebug'.> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurr
No service of type Factory available in ProjectScopeServices 今天在导入新项目时,遇到了文题所示的问题,于是通过搜索查得解决方案: 将工程名下的 build.gradle 中 dependencies 的 classpath 'com.github.dcendents:android-maven-plugin:1.2' 改为 classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.
Mac下配置adb环境变量 1、打开终端输入touch .bash_profile点回车(温馨tip:点(.)前有空格哦,下同。)open -e .bash_profile点回车,便可打开 .bash_profile 文档;2、添加路径 .bash_profile 打开后,我们在这里添加路径。如果打开的文档里有内容,则用英文分号分割。如果是空白文档的话,直接输入如下内容即可:export PATH=${PATH}:????
Android-优化不同版本系统WebView版本兼容性问题 感谢原创博主分享~!~项目地址 : https://github.com/hjhrq1991/JsBridge问题描述App开发时或多或少加载web页面,但是使用h5或者一些新特性来写的web页在Android低版本系统上经常出现各种兼容适配问题。前言WebView是Android系统提供能显示网页的系统控件,它是一个特殊的View,同时它也是一个ViewGroup可以有很多其他子View。在And
应用程序未安装:已安装了存在签名冲突的同名数据包。 问题如题 : 应用程序未安装:已安装了存在签名冲突的同名数据包。【解决方案】:1、检查项目的 包名、签名文件、keystore 的 key 和密码 是否一致;2、如果您是软件的开发人员,遇到该问题大概是因为您使用 Android Studio 将旧版本的软件自动发布到手机或模拟器上,然而使用此种方式安装的软件是使用Android Studio 的测试用签名,你正式将软件进行打包的签名和 Androi
正则表达式 java中常用的匹配正则表达式实例大全 : http://download.csdn.net/detail/chitty1993/9424641 【注:链接中内容 和 本篇 blog 中内容不保证完全一样。】[正则表达式]文本框输入内容控制:整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$"只能输入n位的数字:"^\d{n}$"只能输入至少n位的
android.view.ViewRootImpl$CalledFromWrongThreadException android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. (只有创建了UI对象的主线程才能去修改UI)解决方案一:在 Android 不是线程安全的, Android 有阻止子线程更新 U
Android 设计模式の单例模式——应用最广的模式 一、什么是单例模式?单例模式 就是 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在应用单例模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。二、单例模式的使用场景不能自由构造对象的情况,确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。例如,创建一个对象需
Butterknife 注解框架在 Android Studio 上的使用 作为一名Android开发人员,是不是已经厌烦了大量的findViewById以及setOnClickListener代码,而ButterKnife是一个专注于Android系统的View注入框架,可以让你在添加注解时偷偷懒,直接点击几下鼠标既可以完成注解的增加,同时还是图形化的操作,可以说,大大的减轻了开发负担,尤其是当你的layout中有很多很多的view需要通过findViewById来获得引
Android Studio 常用快捷键(Mac、Win/Linux) 对于从Eclipse(ec)转战到Android Studio(as)的同学,最不适应的地方大概就是快捷键部分了,as默认的快捷键和ec差别很大,但是as强大的地方在于通过设置你可以一直沿用ec风格的快捷键,这样对于从ec过渡来的同学省了很多学习成本。 对于newbie或者对Eclipse没有好感的同学们,肯定想学习默认的Studio快捷键,下面整理了些Mac、Win/Linux 不同操作系统上的
你想要的、资小料~(未完待续。。) 乱序无分类未整理:Android API Guides: https://developer.android.com/index.html Android Developers Blog(google官方网址): http://android-developers.blogspot.com/ AndroidDevTools: http://www.androiddevtools.cn/ And
笔记——Android 中的小细节 Q1: Android 在代码中使用 #ffffff 模式 设置背景色A1: mHolder1.mLlItemSsq.setBackgroundColor(Color.parseColor("#F7F4EF"));
关于Android编程文件路径中含有中文字符的问题解决办法 感谢分享 http://blog.sina.com.cn/s/blog_5342e45b01012fu2.html 在网上看到有朋友说,在Android编程中如果实现文件的上传下载过程中,如果遇到文件路径中有中文,比如/sdcard/测试文档.txt或者d:/计算机.xls就会抛出FileNotFoundException的异常,很多论坛中提示大家用URLEncoder.encode(
Android TV 智能电视/盒子 APP 开发焦点控制 两种方法实例 感谢分享 http://www.7po.com/thread-564068-1-1.html第一种方法:采用Android自带的直接控制焦点上下左右的方法。这种方法的前提是必须知道每个view的id,因此在进行布局时有必须要通过view.setId(…)指定view的特定ID,然后通过view.setNextLeftView(…)等四个方法控制该view的上下左右移动后所到
Android app 判断是手机还是平板 方法一:public static boolean isTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)
从字节码视角看java字符串的拼接 搞java的都知道,string直接用+拼接的时候,javac编译会进行优化,因此字符串拼接也推荐使用stringbuffer或者stringbuilder。那到底是怎么优化的呢?简单的代码如下 package test;public class Java { public String test(String s1, String s2) { return s1 + s2
Java 两个整数相除保留两位小数,将小数转化为百分数 java 两个整数相除保留两位小数: java中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为浮点数,必须将两整数其一或是两者都强制转换为浮点数。例如:(float)a/b // 将整数其中一个强制转换为浮点数,再与另一个整数相除a/(float)b(float)a/(float)b // 将两个整数同时强制转换为浮点数
JAVA字符串格式化-String.format()的使用 及 Android 中 string.xml 中 字符串格式转化 常规类型的格式化String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。format(Lo
Android 中使 EditText 失去焦点,禁止弹出软键盘,及 弹出软键盘后 EditText 自动上移 不致被遮挡 在应用中,有时候一进入某页面, EditText 默认会自动获取焦点,弹出软键盘,遮挡界面,用户体验很不好。下面我们来解决一下此问题:(亲测有效哦~)在 AndroidManifest.xml 中的 相应的 activity 的 标签中 加入下面三句代码 即可; android:hardwareAccelerated="false" android
Android 实现 session 保持 最近在开发项目的过程中,遇到 android 与 web 服务器要在同一 session 下通信的问题。先来了解一下 session 机制 和 session 的实现方式:Session机制Session 机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。当程序需要为某个客户端的请求创建一个 session 的时候,服务器首先
Android 如何定义全局变量 以及 static静态变量使用误区 的问题 static 修饰的是 静态变量,它的优点是 使用很方便,在不同的类和包中都可以使用,在虚拟机中单独占用内存。不过使用 static 有一些不太好的地方:项目中 使用 static 的很多地方会莫明的出现空指针异常的错误,经过排查,可能就是static的问题。如此来说,static 静态修饰在Android的开发中是不是很危险?或许我们可以说如果是static User u = new
SuperNotCalledException 项目运行后报错: android.util.SuperNotCalledException: Activity {com.chitty.easylottery/com.chitty.easylottery.activity.RegisterActivity} did not call through to super.onDestroy();解决方法: 在
Android UrlEncodedFormEntity() 和 StringEntity() 的区别 在做安卓端向服务器使用 http 请求数据时,使用post方式,并且需要传递参数。遇到的问题 及 解决方法如下: 起初,我使用了 UrlEncodedFormEntity() 这个方法,但是后台报错,无法解析json内容;httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));这是后台获取到的
Android 启动 eclipse 错误:找不到元素‘d:devices'的声明 当打开 eclipse 后,会弹出如下错误提示信息:解决方法: 可以把 C:\Users\Chitty\.android\devices.xml 这个文件删除,再把 sdk 里面的 tools\lib 下的这个文件拷贝到你删除的那个文件夹里。 然后重启 eclipse 就 OK 了~
Android 获取验证码后 在Button控件上 显示倒计时 方法一:只展示核心代码:private TimeCount time;然后,在 Button 的点击事件里写time = new TimeCount(60000, 1000);time.start();// 开始计时class TimeCount extends CountDownTimer { public TimeCount(lon
Android APP 退出时 “你敢再按一次,我就退出了!” 功能实现 方法一:在 MainActivity.java 中 private Boolean ispressed=false; private android.os.Handler handler = new android.os.Handler() {}; @Override public void onBackPressed() {// sup
Android Studio 断点调试(debug) 先编译好要调试的程序。1.设置断点选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可。 2.开启调试会话点击红色箭头指向的小虫子,开始进入调试。 IDE下方出现Debug视图,红色的箭头指向的是现在调试程序停留的代码行,方法f2()中,程序的第11行。红色箭头悬停的区域是程序的方法调用栈区。在这个区域中显示了程序
解决 Android Studio 的 ADB not responding 错误 ADB not responding. If you would like to retry, then please manually kill "adb.exe" and click "Restart".
Android 如何保证App切换到后台,或页面跳转后,重新打开APP、或返回之前页面时,维持其状态不变 项目中遇到的一些小问题,记录、分享一下。Android 如何保证App切换到后台,或页面跳转后,重新打开APP、或返回之前页面时,维持其页面状态不变?