
android
pikachu-fat
看我又不撩我是流氓
展开
-
java 代理模式之动态代理应用及源码解析
代理模式代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:张三想买某种用品,虽然他可以自己去找,但是这确实太浪费时间和精力了,或者不好意思去买。于是张三就通过中介Mark来买,Mark来帮张三,张三只是负责选择自己喜欢的的size,然后付钱就可以了。目的:(1)通过引入代理对象的方式来间接访问目标对象,防止直接访问目标对象给系统带来的不必要复杂性; (2)通过代理对象对原有的业务增强;代理模式一般会有三个角色原创 2020-10-15 12:10:18 · 261 阅读 · 0 评论 -
Android高版本 scared读写权限问题,读写权限授予后仍提示 Permission denied!
Android 10 或者模拟器在向sdcard中写文件时发现,明明已经给了app sdcard卡的读写权限: private static final int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE = { "android.permission.READ_EXTERNAL_STORAGE", "android.permission.W原创 2020-10-14 17:55:43 · 1078 阅读 · 1 评论 -
Android targetSdkVersion、buildToolVersion与CompileSdkVersion的区别和关系
相关版本配置介绍compileSdkVersion:这个是我们在打包时编译apk使用的sdk的版本号,也就是API-19、API-28等buildToolVersion:构建工具的版本号,一般是API-LEVEL.x.x,中间会有些小版本。如我们将资源文件打包成.java文件使用的aapt工具、将.class文件编译成.dex文件的dx工具等,这些工具在build-tool目录下如我项目的配置如下:compileSdkVersion 29buildToolsVersion "29.0.原创 2020-10-14 12:11:12 · 2320 阅读 · 0 评论 -
Java反射的简单介绍
什么是反射我们平时在创建对象的时候,一般都是通过直接new来获取,可以理解为这是正向的。反射我们可以理解为是反向的获取实例对象,他可以获取一个类的属性、构造器、方法、以及实现的接口等。Class类了解反射之前,我们最好先了解一个类:Class。这是一个什么样的类呢,有什么特殊的地方?我们平时自己编写的类,会定义一些属性、方法什么的,那系统存不存在一个类用来描述我们自己编写的类呢?我们自己写的类通过这个Class,就相当于自己照镜子一样,有哪些属性、那些方法、构造器等都会以Class的某种属性存在,Cl原创 2020-10-14 10:28:47 · 171 阅读 · 0 评论 -
java 泛型知识总结
首先说一下什么是泛型泛型,就是参数化类型。我们都知道在定义方法的时候,可以传入形参,在使用的时候实参,这是我们经常使用的,但是什么是参数化类型呢?顾名思义,就是将类型进行参数化,一般我们经常见到的分为三种:泛型类(class)、泛型接口(interface)、泛型方法(method)。我们为什么使用泛型可以通过如下代码说明:将错误发现在编译器 List list = new ArrayList(); list.add("first"); li原创 2020-10-12 08:42:13 · 136 阅读 · 0 评论 -
Android HandlerThread的用法
在进行Android开发很多时候都会用到线程调度,使用较多的就是Handler和Thread,其实Android还为我们封装了他们的结合体HandlerThread,那么他是个什么东西呢,又是怎么工作的,我们今天就来从源码角度来分析一下HanderThread我们知道在线程里面创建Handler需要先调用Looper.prepare()创建looper,最后调用Looper.loop()开启循环...原创 2020-03-11 21:10:07 · 473 阅读 · 0 评论 -
INSTALL_FAILED_ALREADY_EXISTS
安装应用时提示:INSTALL_FAILED_ALREADY_EXISTS,因为系统已经存在一个版本,只需要加上-r即可,adb install -r xxx.apk原创 2020-03-07 20:03:49 · 814 阅读 · 0 评论 -
android studio编译jar包或者aar包
1. 在原有工程目录右键-> new ->Module->:2. 选择library:3. 一路next,最后finish:4. 在新生成的lib module下的build.gradle中添加如下代码:task makeJar(type: Copy) { //删除存在的 delete 'build/outputs/aar/plugin-releas...原创 2020-03-07 17:09:39 · 1205 阅读 · 0 评论 -
android jar “Caused by: com.android.tools.r8.utils.AbortException”
android studio打jar包后集成,安装报错“Caused by: com.android.tools.r8.utils.AbortException”,经过排查错误,发现这是因为较新的java8语言特性导致的,可以通过在项目Module的build.gradle文件中添加以下代码解决:android { ... compileOptions { sourceCompa...原创 2020-03-04 19:51:32 · 3014 阅读 · 0 评论 -
Handler+Looper+MessageQueue+Message(源码解析Handler机制)
1. 在做移动端开发时对handler都不会陌生,之前看过handler发送消息和传递消息的源码,但是时间久了仅有印象,一直想形成书面文字,加深自己的理解,现在可以了。2. 我们在使用handler的时候,一般有如下用法:Handler handler = new Handler(){ @Override public void handleMessage(Me...原创 2020-02-28 18:07:09 · 227 阅读 · 0 评论 -
NanoHttpd android客户端作为服务器使用
如果想把一个apk的能力对外提供,常用的方法是通过进程间通信的方式和第三方apk进行交互,但是针对web应用,这种交互方式就不太合适,但是也不是不可以解决,web应用和本地的native应用进行交互(通过javaScript,可参考android+html5+javascript 混合开发教程),本地的native在和能力提供者进行进程间通信,但是这样就比较麻烦,也不是我们今天想要讲的重点,我们今...原创 2019-11-12 22:39:14 · 1313 阅读 · 0 评论 -
INSTALL_FAILED_DUPLICATE_PERMISSION错误
在使用adb install -r xx.apk的时候,报错INSTALL_FAILED_DUPLICATE_PERMISSION,原因是因为在Android5.0之后,新增加的permission判断中,声明了两个相同自定义权限的apk如果没有使用相同的签名,则仅可以安装一个应用,可以通过修改自定义签名的方式解决,或者仅仅使用,不要进行声明...原创 2019-11-12 22:13:14 · 1617 阅读 · 0 评论 -
INSTALL_FAILED_TEST_ONLY原因和解决方法
开发过程中发现自己在Android studio上进行安装是可以的,但是打成debug apk给其他人使用adb install -r xxx.apk时,会报错提示:INSTALL_FAILED_TEST_ONLY,查看原因是因为在Android studio 3.0之后,build budeg apk时会默认在manifest的application里面加入android:testOnly="t...原创 2019-10-28 14:44:24 · 13880 阅读 · 0 评论 -
sublime text 打开txt文档乱码问题
对于windows系统使用系统自带的txt编辑工具,默认打开和保存文件的文件的格式是GBK或者GB2312,而sublime默认仅支持utf-8,所以当从windows系统拷贝文件在mac上浏览有时候会出现乱码的问题,这时候就需要安装插件使submile对这两种编码格式进行支持1. 输入快捷键ctr+shift+p有如下显示:2. 在命令行里面输入 install 下拉框中会有package...原创 2019-10-21 09:32:02 · 2505 阅读 · 2 评论 -
Android 广播、service自定义权限
步骤(我们以广播broadcastReceiver为例)应用A1、新建class,继承BroadcastReceiver,如下:public class TestRece extends BroadcastReceiver { private static final String TAG = "TestRece"; @Override public void on...原创 2019-10-15 17:28:47 · 1560 阅读 · 0 评论 -
Android 静态注册广播收不到
一、问题现象在进行Android开发的时候,多有种方式和第三方应用进行通信,常见的有aidl、service、receiver、contengprovider等,这不,最近为了省事使用了广播和第三方应用进行通信,但是发现一个问题,对方偶发收不到广播,开始怀疑对方是不是动态注册了广播,和对方的开发确认是静态注册(也就是在manifest文件中注册),这种方式应该不会有什么问题的,经过多次测试发现问...原创 2019-10-15 16:48:47 · 1597 阅读 · 0 评论 -
初次提交github代码,加入版本库
1. 首先注册github账号,地址:GitHub地址(注册过程自行搜索,和普通的注册流程一样)2. 上传代码到远程仓库2.1 创建远程仓库2.1.1 新建2.1.2 输入名字(如有不缺钱,可以选择private)最后点击create Responsitory2.1.3 生成远程仓库地址2.2 配置本地的仓库2.2.1$ git config --global user.n...原创 2019-06-22 18:10:29 · 457 阅读 · 0 评论 -
Java线程池 ThreadPoolExecutor源码解析
java线程池的使用在很多客户端开发过程中都是必不可少的,主要是为了减少在线程创建和销毁时产生的系统资源消耗,提高客户端的性能.之前对线程池并没有深入的了解,最近在项目中遇到了一个问题,使用threadpoolexecutor.submit(runable)之后,runable的run方法并没有回调,所以去看一遍源码,为了加深巩固自己的理解,整理成博客,另外,我将Android系统的ThreadP...原创 2019-07-09 20:00:07 · 278 阅读 · 0 评论 -
android studio 从local.properties文件中读取配置数据
在进行开发时总会遇到在调试阶段经常手动修改的配置,这样的需求在properties文件中实现就比较合适,下面以组件化开发时各个模块是否单独编译运行为例。1. 新建properties文件:在项目的根目录右键 -> New -> Resource Bundle -> 起个名字(我的是moudle),创建完成后就可以在项目的根目录下看到有moudle.properties文件生成(...原创 2019-07-10 09:56:02 · 2732 阅读 · 0 评论 -
Android CC 组件化开发
以前开发针对功能较多的应用,一般是通过分包的形式将各个模块进行解耦,然后将将通用的工具或者逻辑进行封装供其他模块使用,但是这样依然很难进行有效的解耦,因为其他包里面的类依然可以通过new的方式进行创建,很难进行把控,尤其针对各个功能模块可能需要单独上线的应用更是无法满足要求,不经意就会出现空指针异常。来到现在的项目组之后接触了一个组件话开发的框架CC,一个可以实现组件动态组册,完成各个组件很好的...原创 2019-07-15 22:26:37 · 1722 阅读 · 0 评论 -
Android DeadObjectException 异常 aidl通信
一、异常原因在使用aidl进行进程间通信时,有时候在客户端调用服务端的接口会抛出DeadObjectException异常,原因一般是由于某种原因服务端程序崩溃重启或者服务对象由于内存紧张被回收导致的,最近开发的时候遇到过此问题,解决方案有两种,实测有效。二、解决方案如下两种方案1. 方案一:针对应用开发,可以在服务端进程启动的时候发个消息给客户端,客户端收到消息的时候重新进行绑定操作,目的...原创 2019-08-06 13:52:42 · 16851 阅读 · 0 评论 -
单例设计模式
常用的单例模式一. 单例模式一般有以下几个特点:1. 构造方法不对外开放,一般是private2. 通过一个静态方法或者枚举返回单例对象3. 确保单例类的对象有且仅有一个,尤其是在多线程的情况4. 确保单例类对象在反序列化的时候不会创建新的实例通过将构造方法私有化,防止外面调用构造方法创建多个实例;同时内部提供一个静态方法,将内部的单例对象对外提供,尤其注意多线程的时候防止创建多个实例...原创 2019-06-25 22:11:58 · 173 阅读 · 0 评论