![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android知识点
_ext
热爱编程。
展开
-
单测编写
1、上报相关单测 /** 被测代码 */ fun reportLikedVideoRemoveExposure(num: String?, feed: stMetaFeed?, rank: String?, userId: String?) { val map = JsonObject() map.addProperty("num", num ?: "") map.addProperty("rank", rank ?: "") .原创 2020-09-03 21:06:17 · 640 阅读 · 0 评论 -
MediatorLiveData#addSource踩坑记录
1.关于MediatorLiveData的addSource()方法 /** * Starts to listen the given {@code source} LiveData, {@code onChanged} observer will be called * when {@code source} value was changed. * &...原创 2020-03-22 14:45:32 · 3388 阅读 · 0 评论 -
git相关操作
从已有分支拉出新分支1、切换到被copy的分支(master),从服务器拉取最新版本$git checkout master$git pull2、从当前分支copy出新的开发分支,命名dev分支$git checkout -b dev3、把新建的分支push到远端$git push --set-upstream origin dev4、拉取验证$git pu...原创 2019-11-26 19:00:03 · 174 阅读 · 0 评论 -
git命令
一、新建代码库# 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url]二、配置/ Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。# 显示当前的原创 2017-11-25 13:48:06 · 238 阅读 · 0 评论 -
反射访问类的私有属性对象的私有方法
一、什么是反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,J原创 2017-11-11 10:52:26 · 1580 阅读 · 0 评论 -
android NDK JNI so文件的制作和使用
为何要用到NDK?概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的Java层代码很容易被反编译,而C/C++库反编译难度较大;2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的;3. 便于移植,用C/C++写的库可以很方便在其它的嵌入式平台上再次使用。一、NDK开发环境的搭建:在原创 2016-10-01 00:20:15 · 836 阅读 · 0 评论 -
Activity、View、Window和WindowManager
一、Window简介(1)Window表示一个窗口的概念,一般用不到,当在某些特殊的时候我们需要在桌面上显示一个类似悬浮窗的东西就需要Window来实现。(2)Window是一个抽象类,它的具体实现是PhoneWindow。(3)创建一个Window只需要通过WindowManager即可完成。(4)WindowManager是外界访问Window的入口,Window的具体原创 2017-04-09 17:02:27 · 459 阅读 · 0 评论 -
EditText 特殊字符过滤和字符长度限制的最优方法
在android开发中,经常会碰到edittext中特殊字符过滤和字符长度限制同时要求的问题,由于android不同版本之间的兼容问题,以及各种手机支持情况不同,因此,经常会出现一些设备上面不兼容问题。为了解决这个问题,这里经过实践总结,给出一个最优的方案:首先,对于字符长度的限制我们可以使用3种方法,如下:1,使用EditText的setFilter方法实现,代码如下:定原创 2017-02-12 11:12:25 · 2738 阅读 · 0 评论 -
ThreadLocal的理解
学习一个东西首先要知道为什么要引入它,就是我们能用它来干什么。所以我们先来看看ThreadLocal对我们到底有什么用,然后再来看看它的实现原理。ThreadLocal如果单纯从名字上来看像是“本地线程"这么个意思,只能说这个名字起的确实不太好,很容易让人产生误解,ThreadLocalVariable(线程本地变量)应该是个更好的名字。我们先看一下官方对ThreadLocal的描述:该类原创 2016-10-16 12:31:45 · 1047 阅读 · 0 评论 -
NDK在验签加密项目中的应用
基本概念介绍 JNI 全称 Java Native Interface,Java 本地化接口,可以通过 JNI 调用系统提供的 API。操作系统,无论是 Linux,Windows 还是 Mac OS,或者一些汇编语言写的底层硬件驱动都是 C/C++ 写的。Java和C/C++不同 ,它不会直接编译成平台机器码,而是编译成虚拟机可以运行的Java字节码的.class文件,通过JIT技术即...原创 2018-11-27 23:15:16 · 261 阅读 · 0 评论 -
一次线上bug的追踪
最近快要过年了,项目上也不是很忙,就是做些修修补补的工作,下午组长给我一个任务,把我拉进一个风控部门建立的群。看了下问题描述: 线上某壳拉新时大约有三分之二的新用户升级到2.3.0版本时上报的某盟id为null。接到这个任务后头脑里一片空白,竟然不知如何下手,线上apk没法调试,而且是偶现的bug。 线上bug,能做的就是先下载线上有bug的apk本地...原创 2019-01-26 17:36:18 · 1428 阅读 · 0 评论 -
gradle日常使用命令
1. 查看库依赖原创 2019-04-03 14:28:01 · 145 阅读 · 0 评论 -
RxJava2.x的源码分析----基本调用
RxJava大家已经很熟悉了, 百度上关于RxJava的技术文章大把, 我为了锻炼自己阅读源码的习惯, 现在开始阅读第三方库的时候做个记录, 假装自己看过开源库的源码.我们就从RxJava的基本使用来开始分析吧, 常用的使用方式如下所示:Observable.create(new ObservableOnSubscribe<Drawable>() { @Override...原创 2019-05-25 13:44:42 · 128 阅读 · 0 评论 -
RxJava2.x的源码分析----线程切换
RxJava大家已经很熟悉了, 百度上关于RxJava的技术文章大把, 为了锻炼自己阅读源码的习惯, 现在阅读第三方库的时候做个记录, 假装自己看过开源库的源码.今天我们就分析RxJava的线程切换源码, 没有看过RxJava的基本调用过程的请移步RxJava的基本流程, 分析的demo代码如下:Observable.create(new ObservableOnSubscribe<...原创 2019-05-25 18:53:59 · 255 阅读 · 0 评论 -
插入排序
概念原理:从第一个元素开始,左边视为已排序数组,右边视为待排序数组,从左往右依次取元素,插入左侧已排序数组,对插入新元素的左侧数组重新生成有序数组需要注意的是,在往有序数组插入一个新元素的过程中,我们可以采用按顺序循环比较,也可以通过折半查找法来找到新元素的位置,两种方式的效率取决于数组的数据量. 最坏时间复杂度O(n^2)最好时间复杂度O(n)平均时间复杂度O(n^2)...原创 2016-01-18 13:48:38 · 276 阅读 · 0 评论 -
冒泡/下沉排序
冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 /** * 冒泡法排序 */ private void bubblingSort() { ArrayList<Integer> dataSource = buildDataSource(); Log.i("bu...原创 2016-01-18 12:45:45 · 1517 阅读 · 0 评论 -
选择排序
选择排序就是不断地从未排序的元素中选择最大(或者最下)的元素放入已经排好序的元素集合中,直到未排序中仅剩一个元素为止具体实现步骤如图:private void selectSort() { ArrayList<Integer> dataSource = new ArrayList<Integer> (); dataSource .add...原创 2016-01-12 14:06:54 · 335 阅读 · 0 评论 -
全屏沉浸式透明状态栏效果
前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏、 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体验。而Android 5.0之后谷歌又提出了 ColorPalette 的概念,让开发者可以自己设定系统区域的颜色,使整个 App 的颜色风格和系统的颜色风格保持统一。今天学习总结一下如何转载 2017-01-10 23:21:53 · 2723 阅读 · 0 评论 -
Android 动态监听网络变化
对当前手机的网络状态进行判断。转载 2016-09-17 14:06:47 · 3636 阅读 · 0 评论 -
for each删除List中的元素出错
场景是,需要删除objList中的某几个元素,自然而然,我们会习惯性的写下如下语句:int i = 0; for(Object o : objList) { if(o == value) { objList.remove(i); } i++; } 123456789报错:这时你就会发现报 java.ut转载 2016-08-31 13:42:48 · 2428 阅读 · 0 评论 -
Retrofit 2.0 文件上传类型
错误信息如下:[html] view plain copyUnexpected Exception caught setting 'image' on 'class com.legwork.action.CheckAction: Error setting expression 'image' with value ['ic_business转载 2016-03-30 23:02:02 · 2725 阅读 · 0 评论 -
Android 性能优化:使用 Lint 优化代码、去除多余资源
读完本文你将了解到:前言什么是 LintLint 工作方式简单介绍从命令行运行 LintAndroid Studio 中使用 Lint团队中建立代码规范利器提升降低问题的等级Lint 虽好也不能贪杯在 Java 代码中忽略 Lint 警告在 XML代码中忽略 Lint 警告Gradle 中配置 Lint自动删除查找出来的无用资源文件总结Thanks转载 2017-01-09 23:19:13 · 517 阅读 · 0 评论 -
Fragment-常见问题
背景Fragment已经成为Android开发界面设计中不可或缺的一部分,同时也发挥着越来越重要的角色,虽然Fragment已经能出色的项目开发,但是在使用过程中也暴露了越来越多的问题,虽然google也一直在及时的修复,但是还是有很多坑,所以决定记录Fragment使用过程中的使用问题,避免小伙伴们重复踩坑。在了解踩坑之前,我们需要先了解Fragment的使用要点和使用方法Fra原创 2017-01-09 22:52:59 · 404 阅读 · 0 评论 -
AsyncTask源码分析
就从AsyncTask的构造方法开始分析原创 2016-11-20 20:33:36 · 326 阅读 · 0 评论 -
编译错误-com.android.dx.cf.iface.ParseException,Dx unsupported class file version 52.0 …while parsing
最近在项目中遇到如上两个错误,解决方案:右击项目名称 -> Propertie原创 2016-11-15 10:39:14 · 6206 阅读 · 0 评论 -
利用MAT进行内存泄露分析
MAT简介MAT是一款非常强大的内存分析工具,在Eclipse中有相应的插件,同时也有单独的安装包。在进行内存分析时,只要获得了反映当前设备内存映像的hprof文件,通过MAT打开就可以直观地看到当前的内存信息。一般说来,这些内存信息包含:所有的对象信息,包括对象实例、成员变量、存储于栈中的基本类型值和存储于堆中的其他对象的引用值。所有的类信息,包括classloader、类名称、转载 2016-10-22 22:47:18 · 397 阅读 · 0 评论 -
Android Studio将library手动打成jar包
以这个library为例,我们要将com.zxxk.httputils目录下的内容打成jar包1. 执行make project,执行完之后我们打开如下图所示的目录即可看到class文件2. 配置该库的build.gradle文件,并添加如下代码task clearJar(type: Delete) { delete 'build/libs原创 2016-09-23 17:04:04 · 14863 阅读 · 6 评论 -
为什么要用Fragment.setArguments(Bundle bundle)来传递参数
Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持。Fragment的推出让我们编写和管理用户界面更快捷更方便了。但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢? 为了弄清这个问题,我们可以做一个测试,分别转载 2016-03-30 13:22:34 · 359 阅读 · 0 评论