Android
JoeLittleStar
这个作者很懒,什么都没留下…
展开
-
Room 数据库升级问题 IllegalStateException: Migration didn‘t properly handle xxx
Migration升级数据库有时需要更改现有的数据库架构。如果我们将添加,更新或删除数据库中的某些字段然后运行我们的应用程序,我们将看到来自Room的异常:java.lang.IllegalStateException: Migration didn't properly handle xxxExpected:TableInfo{name='print_setting', columns={enable_original_amount=Column{name='enable_original_amo原创 2021-03-30 14:46:02 · 1667 阅读 · 1 评论 -
Android命令行assemble打包
Android命令行打包打所有生产和调试包gradlew assemble 打生产或调试包gradlew assembleDebuggradlew assembleRelease只用assemble的话,gradle 会把 buildType 和productFlavors 组合打包,很显然命令越清晰,打的包就越精确,这一块也是多渠道打包的要点,主要是通过配置productFlavots去进行多渠道打包,bulidType 控制着打出的包是debug 类型还是release类型。打某个渠道原创 2021-02-05 16:32:39 · 5154 阅读 · 0 评论 -
Room数据库迁移
升级数据库版本时,为了迁移已有的用户数据,要定义版本之间的迁移路径,如1->2val MIGRATION_1_2: Migration = object: Migration(1, 2) { override fun migrate(database: SupportSQLiteDatabase) { //增加表字段 database.execSQL("ALTER TABLE pay " + "ADD COLUMN discou原创 2021-01-25 14:33:47 · 370 阅读 · 0 评论 -
apk 换肤之替换Context
替换Context也就是要拿到皮肤应用中的Context来获取其中的资源文件,重要的方法是:public Context createPackageContext (String packageName, int flags)packageName,皮肤应用的包名flags 有两个可选项:CONTEXT_IGNORE_SECURITY:忽略安全。android默认是禁...原创 2014-07-31 14:57:43 · 555 阅读 · 0 评论 -
【Android开发诀窍】添加动画效果
使用TextSwitcher和ImageSwitcher实现平滑过渡为了是循环浏览过渡过程的视觉效果更自然,Android提供了TextSwitcher和ImageSwitcher分别替代TextView和ImageView。TextView.setText()内容是立即改变的,TextSwitcher可添加内容切换的动画效果。步骤:findViewById获取TextSwitcher对...原创 2018-08-20 15:09:43 · 1463 阅读 · 0 评论 -
URLEncoder的作用
URLEncoder是什么是HTML 格式编码的实用工具类。该类包含了将 String 转换为 application/x-www-form-urlencoded MIME 格式的静态方法。对 String 编码时,使用以下规则:字母数字字符 “a” 到 “z”、“A” 到 “Z” 和 “0” 到 “9” 保持不变。特殊字符 “.”、"-"、"*" 和 "_"保持不变。空格字符 " "...原创 2019-09-16 18:22:11 · 15468 阅读 · 0 评论 -
通过注解限定参数类型
首先了解注解的概念。注解:给程序中的元素(类,方法,字段)添加注释。元注解:注解的注解称为元注解,来看下常见的元注解有@Retention指示注解内容要保留多久。默认为 RetentionPolicy.CLASS。RetentionPolicy 是枚举类,定义了三种保留策略。SOURCE仅在源码阶段保留,编译时会丢弃注解。CLASSClass文件中,编译器将把注解记录在类文件中...原创 2019-08-07 19:39:16 · 5129 阅读 · 1 评论 -
volatile关键字的作用
声明一个域为volatile,那么编译器和虚拟机就知道该域可能被另一个线程并发更新。Java内存模型Java内存模型定义了线程和主存之间的抽象关系:线程之间的共享变量存储在主存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程共享变量的副本。本地内存是Java内存模型的一个抽象概念,并不真实存在,它涵盖了缓存,写缓冲区,寄存器等区域。原子性,可见性和有序性原子性:操作是不可被中断的...原创 2019-06-12 11:00:04 · 142 阅读 · 0 评论 -
EventBus事件分发的线程调度
在EventBus3.0之后,事件处理的方法名可以随便取。但是需要添加一个注解@Subscribe,并且可以指定线程模型。EventBus中的4种TreadMode(线程模型)POSTING(默认):事件在哪个线程发布出来的,事件处理函数就会在哪个线程中运行。事件处理使用此模式必须避免执行耗时操作,以避免阻塞可能是主线程的发布线程。MAIN:事件处理会在UI线程中执行。BACKGROUND...原创 2019-06-04 16:04:44 · 556 阅读 · 0 评论 -
Retrofit是怎样通过定义的接口执行网络请求的
Retrofit的基本用法创建Retrofit// 创建RetrofitmRetrofit = new Retrofit.Builder() .client(httpClient) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(...原创 2019-06-03 18:15:18 · 386 阅读 · 1 评论 -
Android并发访问数据库
当你自己实现SQLiteOpenHelperpublic class DatabaseHelper extends SQLiteOpenHelper { ... }在单独的线程中将数据写入数据库时 // Thread 1 Context context = getApplicationContext(); DatabaseHelper helper = new DatabaseHelp...原创 2019-05-23 14:50:25 · 649 阅读 · 0 评论 -
Android WebView Java和JavaScript的交互(二)
JavaScript有三种消息提示框,分别是:弹出警告框alert,弹出确认框confirm,弹出输入框prompt。对应到Android中的WebChromeClient的三个方法,其中onJsPrompt的参数是带有一个字符串的返回结果JsPromptResult。@Overridepublic boolean onJsPrompt(WebView view, String url,...翻译 2018-08-24 15:04:26 · 220 阅读 · 0 评论 -
【Android开发诀窍】实用工具&活用列表
在正式版本移除日志打印语句我们可能会使用类似以下代码在正式版本移除日志打印语句。if(BuildConfig.DEBUG) { Log.d(LOG_TAG, "Log should be deleted");}移除日志的最佳方法是使用ProGuard工具。 ProGuard可以移除移除无用代码,或者使用语意模糊的名称来重命名类,变量和方法,以此达到压缩,优化和混淆代码的...翻译 2018-08-21 17:50:51 · 204 阅读 · 0 评论 -
ViewModel和LiveData:模式+反模式翻译
分配职责 应用架构组件中典型的实体交互 理想情况下,ViewModels 不应该对Android框架类有耦合。这提高了可测试性、泄漏安全性和模块性。一般的经验法则是确保你的ViewModels 中没有导入像 android.( android.arch. 例外)。presenters也一样。 不要让ViewModels(和 Presenters)知道Android框架类的存在 条件语句...翻译 2018-09-05 15:22:47 · 385 阅读 · 0 评论 -
Android Room 数据库升级报错 - attempt to re-open an already-closed object
Android Room SQLite Data migration - attempt to re-open an already-closed object查阅文章发现Room 要求:所有整数不为空,向主键添加autoincrement,十进制数为实数,不为空。例如:报错代码database.execSQL("CREATE TABLE Membership (mID INTEGER, ...翻译 2018-12-29 16:02:23 · 2381 阅读 · 1 评论 -
Android应用出现ANR的原因和解决办法
Android规定如果5秒钟之内无法响应屏幕触摸事件或者键盘输入事件就会出现ANR,BroadcastReceiver如果十秒也没执行完操作也会出现ANR。怎么定位问题?当一个进程发生了ANR了以后,系统会在/data/anr目录下创建一个文件traces.txt,通过分析这个文件就能定位出ANR的原因。先导出traces文件,其中.表示当前目录:adb pull /data/anr/tra...原创 2019-05-12 22:58:35 · 1839 阅读 · 0 评论 -
Android常用的线程池
线程池的核心实现类是ThreadPoolExecutor,可以通过它来创建一个线程池,其参数最多的构造方法如下:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime...原创 2019-05-22 15:19:33 · 107 阅读 · 0 评论 -
windowSoftInputMode软件盘输入模式属性值的含义
指定此主活动窗口的默认软键盘输入模式。有两种值类型,窗口和软键盘。窗口调整:值作用adjustPan当显示软键盘时,调整window的空白区域来显示软键盘。软键盘还是有可能遮挡一些有内容区域,这时用户就只有退出软键盘才能看到这些被遮挡区域并进行交互。adjustResize当显示软键盘时,调整window内的控件大小以便显示软键盘。这样的话控件可能会变形。...原创 2019-05-22 17:21:42 · 163 阅读 · 0 评论 -
Android三种动画介绍
帧动画加载一系列的图片资源来创建动画。缺点:加载多图耗费内存。(1)在目录res/drawable/创建动画资源文件。<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <item andro...原创 2019-05-22 17:32:41 · 292 阅读 · 0 评论 -
常用adb命令
Android debug brige 是一个命令行工具,这个工具是Android SDK其中的一部分,Android开发工具包自带的。adb pull 将手机文件导出到电脑adb pull /data/app/packagename-1.apk D:\把apk导出到电脑上(apk安装在 /data/app目录下,文件名是包名拼接上-1.apk)adb pull /data/...原创 2019-05-22 17:42:33 · 147 阅读 · 0 评论 -
Android利用HTTPS实现安全通信
HTTPS 简介HTTPS 全称 HTTP over TLS。TLS是在传输层上层的协议,应用层的下层,作为一个安全层而存在,翻译过来一般叫做传输层安全协议。对 HTTP 而言,安全传输层是透明不可见的,应用层仅仅当做使用普通的 Socket 一样使用 SSLSocket 。TLS是基于 X.509 认证,他假定所有的数字证书都是由一个层次化的数字证书认证机构发出,即 CA。另外值得一...原创 2019-05-22 17:51:54 · 276 阅读 · 0 评论 -
Android WebView Java和JavaScript的交互(一)
Java调用JavaScriptwebView.loadUrl(“javascript:fn()”); 其中fn方法是H5页面中的JavaScript函数。JavaScript调用Java需要三个步骤: 1. 调用与WebView关联的WebSetting实例的setJavaScriptEnabled方法启用功能。 2. 调用WebView的addJavascriptInte...翻译 2018-08-24 12:08:40 · 173 阅读 · 0 评论