Android
文章平均质量分 54
孙朝阳
逆水行舟,不进则退!
展开
-
Sqlite3知识总结一(基础知识及相关要点)
like和glob的区别like不区分大小写, glob区分大小写。like: 百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。glob: 星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。...原创 2020-05-29 15:26:38 · 612 阅读 · 0 评论 -
Sqlite3知识总结二(高级用法)
现有两张表用于下面的演示:company、department.多表查询SQLite 的 Join 子句用于结合两个或多个数据库中表的记录。JOIN 是一种通过共同值来结合两个表中字段的手段。SQL 定义了三种主要类型的连接:交叉连接 - CROSS JOIN、内连接 - INNER JOIN、外连接 - OUTER JOIN。1、交叉连接(CROSS JOIN)把第一个表的每一行与第二个表的每一行进行匹配。如果两个输入表分别有 x 和 y 行,则结果表有 x*y 行。select emp_id原创 2020-06-12 19:55:31 · 1113 阅读 · 0 评论 -
Android热修复原理
基本概念热修复是针对apk而言的,所以先来看看apk里都有些什么东西assets:保留工程中的assets目录,这些文件是原始文件,包含其他jar里的assets文件lib:so文件META-INF:签名相关文件resources.arsc:资源文件索引,包含了所有文件的索引,以及他们具体的ID值和类型信息,实际资源还在res里res:工程的资源文件,以主工程为主,其他文件(jar...原创 2019-12-24 18:18:11 · 359 阅读 · 0 评论 -
Gradle相关知识总结
Gradle简介Gradle,是一个基于 JVM 的富有突破性构建工具,基于 groovy,其 build 脚本使用 groovy dsl 编写!任何一个 Gradle 构建都是由一个或多个 project组成。每个 project 包括许多可构建组成部分,由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作,如编译,打包等。构建简单Tasktask hello...原创 2018-12-07 10:20:56 · 239 阅读 · 0 评论 -
AndroidStudio出现的问题总结
1、AndroidStudio出现Read Timed out去项目外层的build.gradle中 repositories添加mavenCentral()maven { url 'https://maven.google.com' }如图:原创 2018-10-21 15:30:08 · 731 阅读 · 0 评论 -
Android开发技巧总结
1、获取全局Context 编写Application public class MyApplication extends Application { private static Context context; @Override public void onCreate() { //获取Context co...原创 2018-09-03 15:29:49 · 593 阅读 · 0 评论 -
Android的Drawable
Drawable是一个抽象类,它有众多子类如ShapeDrawable BitmapDrawable等. 它有一个重要的参数是内部宽高,通过getIntrinsicWidth和getIntrinsicHeight获取! 内部大小不等于它的大小,一般来说Drawable没有大小,当其作为View的背景时,Drawable会被拉伸至View的同等大小!Drawable的分类及层次关系 ...原创 2018-09-05 18:45:54 · 934 阅读 · 0 评论 -
主module或其它module模块 无法引用另一个module里面的依赖
原因是我将所有的module里面的comile全都更换成了implementation,因为编译的时候官方一直推荐使用后者替代前者,但是implementation声明的依赖只能在本module模块内使用,跨module使用就要使用api声明! 如: api 'com.jakewharton:butterknife:7.0.1'...原创 2018-09-04 14:51:15 · 9112 阅读 · 3 评论 -
Android知识点总结(三)自定义View
ViewRoot和DecorView原创 2018-08-16 18:32:26 · 363 阅读 · 0 评论 -
Android知识点总结(二)View的事件体系
VIEW的基础知识MotionEvent和TouchSlopMotionEvent getX/getY: View相对于父容器的x和y坐标 getRawX/getRawY: 相对于屏幕左上角的x和y坐标TouchSlop TouchSlop是系统能识别的滑动的最小距离! 和设备有关,不同设备的值可能不一样,通过ViewConfiguration.get(getContext).g...原创 2018-08-01 11:03:49 · 387 阅读 · 0 评论 -
Android组件化学习
组件化思想是对模块化的进一步演变,相对与模块化,组件化更加灵活,可以在application与library之间相互转换!无论是组件化还是模块化,都是对大型项目的一种耦合度的解耦,方便团队协作开发!上面是组件化的基本架构图,可以看到组件化一个很明显的特点就是分层!还有一个重点就是通信。架构图从下到上依次为基础层、组件层和应用层!基础层主要包含一些基础库如图片加载框架、网络框架等;组件层就是...原创 2019-02-21 23:49:32 · 422 阅读 · 0 评论 -
从零开始手写一个组件化demo
根据上篇Android组件化学习文章,编写一个组件化demo,其结构如下:APP:主moduleLogin:登录组件Pay:支付组件,支付时需要判断是否登录Common:基础组件,包含基础库、公共页面等CommonBase:包含各个组件对外提供访问自身数据的接口、抽象方法等1、使用AS创建一个工程,同时创建Login、Pay、Common、CommonBase四个Libray效...原创 2019-03-01 18:45:55 · 557 阅读 · 0 评论 -
AndroidStudio编译报错org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:proces
AndroidStudio编译报错:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugResources'.finished with non-zero exit value 1Android resource compilation failed Output...原创 2019-03-20 16:32:45 · 53283 阅读 · 2 评论 -
Android知识点总结(四)进程间通信
进程间通讯方式Android进程通讯方式有很多,如Socket、ContentProvider、共享文件(这种方式的缺点是不支持并发写,同时需要手动操作IO)、AIDL、Messenger(底层实现也是AIDL)等。使用MessengerMessenger是一种轻量级的IPC方案,可以在不同进程中传递Message对象。不适用与并发服务场景。下面是其常用方法源码 /** *...原创 2019-04-01 16:35:38 · 545 阅读 · 0 评论 -
Android知识点总结(五)进程间通信之Binder连接池
Android知识点总结(四)进程间通信上一篇文章记录了Messenger及AIDL的使用。其中AIDL的使用是最广泛的,其大致流程:首先创建一个Service和一个AIDL接口接着创建一个类继承自AIDL接口中的Stub类并实现Stub中的抽象方法(也可以直接使用匿名内部类的方式实现),在Service的onBind方法中返回这个类的对象然后客户端就可以绑定服务端Service,建立连...原创 2019-04-11 14:43:13 · 303 阅读 · 0 评论 -
实现子view滑动一段距离后,让父view进行滑动
思路分析前期子view需要滑动,所以要获取事件,即此时父view不能拦截事件后期父view需要滑动,此时父view需要进行拦截,获取事件将上面的分析转化为伪代码://子view @Override public boolean dispatchTouchEvent(MotionEvent event) { switch (event.getAction(...原创 2019-06-05 12:50:55 · 793 阅读 · 0 评论 -
OverScroller的一些重要方法和属性
OverScroll与Scroll类类似,都是实现弹性滑动、惯性滑动的辅助类,只不过OverScroll出现的比较晚,功能更全面一些,可以实现边界回弹等。之所以说它是一个辅助类,是因为它本身并不能移动View,真正移动View的实现需要我们在回调方法computeScroll()中自己实现。基础方法getStartX()和getStartY()getStartX() 滑动的起点x坐标 ,对...原创 2019-07-02 18:36:07 · 4494 阅读 · 0 评论 -
关于手动添加RecyclerView列表项导致Item里的EditText数据混乱的问题
如果没有手动添加Item这个功能,比较好处理一些,最简单的方法禁止复用holder.setIsRecyclable(false);,但如果有手动添加Item,或者要监听EditText的addTextChangedListener,这时就是禁止复用也没有效果。此时,就得使用绑定tag的方法:第一、为列表实体类添加一个属性uid,作为一个唯一标志,再创建实体类Data的时候,为这个属性设置一个唯...原创 2019-06-27 15:28:44 · 685 阅读 · 0 评论 -
搭建IPC通信框架(RPC)
Android进程通讯方式有很多,如Socket、ContentProvider、共享文件(这种方式的缺点是不支持并发写,同时需要手动操作IO)、AIDL、Messenger(底层实现也是AIDL)等。关于AIDL和Messenger的使用详见Android知识点总结(四)进程间通信可以发现Android中IPC方式的使用不是有诸多限制,就是使用起来比较麻烦,所以搭建一套简单易用的IPC框架是很...原创 2019-07-29 17:57:53 · 1972 阅读 · 0 评论 -
Android知识点总结(一)
onPause操作里为什么不能做耗时操作 android在onPause里面不应该做耗时操作,因为跳转页面时,先调用当前页面的onPause,再去调用创建,所以这里如果做了耗时操作,就会出现卡顿!onSaveInstanceState、onRestoreInstanceState状态存储相关 @Override protected void onSaveInstanceS...原创 2018-07-06 10:28:30 · 545 阅读 · 0 评论 -
gradlew常用命令、adb常用命令、adb shell常用命令
gradlew下面全是针对 windows 操作系统的。如果是 Linux / Mac 请直接用 ./ 前缀。gradlew clean //类似Clean Projectgradlew -v //查看Gradle、Groovy、Ant、JVM等的版本gradlew build --info //编译并打印日志gradlew dependencies --info //查看详细...原创 2018-05-14 23:48:31 · 7049 阅读 · 0 评论 -
Android 单元测试(五) 之Espresso基础
Espresso 是 Google 官方提供的一个易于测试 Android UI 的开源框架 。新建AS项目时,会自动添加依赖: androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', mod...原创 2018-05-07 21:08:46 · 1640 阅读 · 0 评论 -
Bugly Android自动上传符号表
我采用的是自动配置,这样比较简单,但是还是有一些坑的。 * 官方给出的appId和appKey样板带有尖括号,实际上不能带* appVersion(就是你的versionName),这两个地方不能有汉字,否则不能识别符号表(**这个最坑**)原创 2017-07-11 12:32:01 · 10655 阅读 · 38 评论 -
Android Studio报AndroidRunConfigurationType 、Plugins插件找不到的问题
这个问题解决比较简单: 首先、依次点击File — Setting —Plugins ,勾选android Support。 第二、如果还有显示为红色的插件,先点击取消,然后再勾选上。 最后、点击Apply,再点OK,会提示restart,点击重启就好了。原创 2017-06-16 10:52:16 · 718 阅读 · 0 评论 -
Caused by: android.database.sqlite.SQLiteException: no such table: _table_case (code 1):
自己写数据库时很容易遇到这一类的问题,原因大概有以下两种情况: 1、数据库语句有问题 我同事遇到的就是这一问题,缺一个‘,’: 2、如果是覆盖安装,apk的versionCode需要加一 即如果原来的versionCode是5,覆盖安装需要改为6。原创 2017-06-13 10:37:11 · 2518 阅读 · 0 评论 -
动态改变Shape中的颜色
当控件背景是一个Shape时,要想改变其背景色,不能直接使用view.setBackground… 实现代码如下:GradientDrawable background = (GradientDrawable) view.getBackground();//GradientDrawable是Drawable的子类background.setColor(Color.RED);原创 2017-07-11 12:01:32 · 1072 阅读 · 0 评论 -
关于避免软键盘遮挡EditText显示的问题
转载请标明处:这里写链接内容 1、EditText外层加一个ScrollView 2、EditText的背景设置为“@null”3、EditText属性windowSoftInputMode设置为“adjustResize”原创 2017-05-26 14:57:08 · 589 阅读 · 0 评论 -
Android 模拟强制下线功能
原理: 发送广播 - - 关闭所有活动 - - 开启登录界面<br>发送广播<br>在需要触发强制下线的地方,发送广播通知。这样就可以将强制下线的逻辑写在广播里面,而不用受制于任何活动!<br>关闭所有活动、开启登录界面<br>接收下线广播后,通过工具类ActivityContainer关闭所有启动的活动,用弹框提示去开启登录界面!<br>原创 2017-04-26 15:31:03 · 1012 阅读 · 0 评论 -
getChildFragmentManager()、 getFragmentManager()、getSupportFragmentManager()的区别
getChildFragmentManager()在Fragment里面嵌套fragment的时候,使用getChildFragmentManager()。getFragmentManager()和getSupportFragmentManager()两者在用法上 没什么区别,区别在于getSupportFragmentManager()是v4包中的方法,可以向下兼容,使用时需导入v4包!原创 2017-04-24 19:11:45 · 737 阅读 · 0 评论 -
Calendar的add和set方法的运用和区别
Calendar的add和set方法的运用和区别 -set 表示直接设值 不考虑原来的时间值 -add 表示在原有的基础上进行加减value calendar.add(Calendar.DAY_OF_MONTH, 2);//表示在默认的当前日期上加两天 calendar.set(Calendar.DAY_OF_MONTH,2);//表示直接将日期设置为本月2号原创 2017-02-23 19:47:43 · 11522 阅读 · 4 评论 -
intent传递数据太大,报TransactionTooLargeException异常
TransactionTooLargeException异常,intent传输数据太大,解决方法有二: 第一:将需要传递的数据信息封装在一个静态的类中,或则封装在跳转对象的一个静态属性中,效率高,但是耦合性也高!第二:将需要传递的数据做本地存储,如SP存储、数据库等,然后在跳转对象中取出来,不会提高程序的耦合性,但是效率较低;原创 2017-07-28 14:18:22 · 7313 阅读 · 0 评论 -
Android Studio 里面类和方法实际被调用了,但是AS显示没有被调用
解决方法很简单: 点击File — Invalidate Caches/Restart即可!原创 2017-07-25 10:39:39 · 4910 阅读 · 5 评论 -
安装app后隐藏桌面快捷启动图标
这个比较简单: 去AndroidManifest.xml将主界面的<category android:name=”android.intent.category.LAUNCHER” />注掉或者改为<category android:name=”android.intent.category.DEFAULT” />原创 2017-08-22 17:09:44 · 1306 阅读 · 0 评论 -
RxJava2.x学习教程(一)基本概念
RxJava (本文所有RxJava全都代指RxJava2)在 GitHub 主页上的自我介绍是:RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM. ...原创 2018-05-19 12:14:28 · 433 阅读 · 0 评论 -
Android 单元测试(二) 之JUnit进阶
本文接上篇文章JUnit基础继续学习JUnit。套件测试 套件测试说的通俗点,就是批量运行测试类。涉及注解@RunWith @Suite 接着使用上篇的Calculater,创建两个测试类:/** * Created by scy on 2018/4/26. */public class CalculaterTest { private Calculater mCa...原创 2018-04-27 12:18:19 · 1655 阅读 · 0 评论 -
Android 单元测试(一) 之JUnit基础
用Android Studio创建工程的时候,src文件夹下会同时生成三个文件夹main、test、androidTesttest和androidTest是专门针对源码级别的白盒测试的。 test:文件夹用于写不依赖设备环境的单元测试,即可在PC上直接运行; androidTest:文件夹用于写需要在设备上才能运行的测试。分类功能测试:和UI无关,测试IO操作、算法、流程等; ...原创 2018-04-27 10:28:52 · 4629 阅读 · 0 评论 -
Android 单元测试(三) 之Mockito的使用
Mockito是一个很不错的模拟框架。它允许您使用干净简单的API编写漂亮的测试代码。 依赖repositories { jcenter() }dependencies { testCompile "org.mockito:mockito-core:2.+" }继续使用前面的Calculater类编写测试类!验证行为/** * Created by scy on 20...原创 2018-05-02 17:57:10 · 830 阅读 · 0 评论 -
Android 单元测试(四) 之AndroidJUnitRunner基础
AndroidJUnitRunner,Google官方的android单元测试框架之一,适用于 Android 且与 JUnit 4 兼容的测试运行器!测试运行器可以将测试软件包和要测试的应用加载到设备、运行测试并报告测试结果。 此测试运行器的主要功能包括:JUnit 支持访问仪器信息测试筛选测试分片要求 Android 2.2(API 级别 8)或更高版本。JUnit 支...原创 2018-05-02 11:32:27 · 13376 阅读 · 0 评论 -
Android 调用地图导航
启动高德地图启动百度地图原创 2017-12-22 15:20:29 · 4812 阅读 · 0 评论 -
JAVA如何获取唯一的数字
众所周知,获取唯一字符串可以使用UUID,但是获取唯一可计算的数字网上并没有什么方案。 近期项目用到,最后使用“纳秒”System.nanoTime() 实现了这一功能,测试如下:原创 2017-11-15 10:10:49 · 4496 阅读 · 0 评论