- 博客(69)
- 收藏
- 关注
原创 多进程Application被初始化多次问题
在Android中,如果有新进程创建,由于进程本身需要一个Application,可以用下面的方法区分是否应该进行初始化private fun shouldInit(): Boolean { try { val am = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager val ...
2019-01-11 15:37:07 1305
原创 Package manager has died
getPackageManger 是通过binder通信的,最大通信是1M,而且这个binder通信是系统整个的,也就是当前整个手机APP所有应用同一个时刻,或者同一个时间内 进行通信 超过了IM就会crash.而如果这时候恰巧在用getPackageManager()做事情,就会提示Package manager has died。 平常网上获取app 相关信息都...
2019-01-09 16:43:46 1525
原创 android避免decodeResource图片时占用太大的内存
尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。 因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的sourc...
2019-01-09 15:44:41 1239
转载 Android 8.0中的一些更改
前言Google Play应用市场对于应用的targetSdkVersion有了更为严a格的要求。从 2018 年 8 月 1 日起,所有向 Google Play 首次提交的新应用都必须针对 Android 8.0 (API 等级 26) 开发; 2018 年 11 月 1 日起,所有 Google Play 的现有应用更新同样必须针对 Android 8.0。以下记录了我们升级targe...
2018-12-21 16:38:40 293
原创 Android 7.1新特性——长按出现快捷方式
简介Android 7.0版本有一个新特性:如果app支持,可以通过长按app图标出现一些快捷操作。一些热门应用举例:20180316085252689.png
2018-12-21 15:36:05 1130
原创 实用的框架
1.CircularFillableLoaders github:https://github.com/lopspower/CircularFillableLoaders2.Android资源混淆工具使用说明https://github.com/shwenzhang/AndResGuard/blob/master/README.zh-cn.md3.LitePal数据库htt...
2018-08-17 17:50:16 208
原创 桌面ICON的红图标
桌面ICON的数字图标来Android原生系统是不支持应用桌面角标(BadgeNumber)显示的。我们目前看到的能支持应用桌面角标显示的Android系统,都是第三方厂商自己定制的。通过实现一套自己的launcher并且提供外部接口给第三方应用来调用即可目前适配的机型有华为、三星1.华为手机先在manifest配置如下权限<!-- 设置华为角标的显示 --&...
2018-08-16 15:26:58 376
原创 Android7.1.1 Toast BadTokenException
这个问题由于targetSDKVersion升到26之后,在7.1.1机型上概率性出现。稳定复现的步骤是,在Toast.show()之后,UI线程做了耗时的操作阻塞了Handler message的处理,如使用Thread.sleep(5000),然后这个崩溃就出现了。原因是7.1.1系统对TYPE_TOAST的Window类型做了超时限制,绑定了Window...
2018-08-16 11:23:11 642
转载 Android studio 使用Cmake完成C/C++ 的使用以及生成so文件
Android studio 2.2版本以后对C/C++的支持可以说很方便了,当然官方推荐使用Cmake完成对C/C++的支持2.2版本以上的同学新建一个项目就知道了,步骤如下:File -> New -> New Project,如下图:然后勾选Include C++ support,一直next ,最后Finish以后,项目就出现了,和一般的项目略有不同,其实只要多了几个文件,而已...
2018-04-10 17:41:52 580
转载 利用Gradle的productFlavors使用应用多现场配置
productFlavors顾名思义,就是用于定义产品的特性,这是每个产品不同的地方。有了它我们就可以用一套代码创建不同的产品。接下来我们看下如何使用…由于已经集成在gradle中,所以能直接在gradle中使用,在app的build.gradle中创建productFlavors结构android{ #...... productFlavors{ productA...
2018-04-10 16:28:02 692
原创 Android热更新实现原理
ClassLoader我们知道Java在运行时加载对应的类是通过ClassLoader来实现的,ClassLoader本身是一个抽象来,Android中使用PathClassLoader类作为Android的默认的类加载器, PathClassLoader其实实现的就是简单的从文件系统中加载类文件。PathClassLoader本身继承自BaseDexClassLoader,BaseDexClas...
2018-04-09 16:15:00 3396
转载 Android学习之Activity与Service进行通信的三种方式
Activity与Service进行通信的三种方式第一种 简单通信直接通过Intent进行传值,我们在启动一个Service的时候通过Intent的对象向Service进行传值,这种方式传递值比较不方便,性能不是很高。(1)在MainActivity中通过启动服务和终止服务的按钮分别调用startService(intent)和stopService(intent)来启动和停止服务MainActi...
2018-04-08 17:54:47 3022
转载 EventBus 3.0 源码解析
本文导读由于EventBus较为复杂,因此本文也相当长,所以本文分为以下几个部分:创建、注册、发送事件、关于粘性事件的解析、以及最后的思考。读者可以有选择性地选取某部分来进行阅读。实现原理创建上一篇文章提到,要想注册成为订阅者,必须在一个类中调用如下:EventBus.getDefault().register(this);那么,我们看一下getDefault()的源码是怎样的,EventBus#...
2018-04-03 18:04:10 185
转载 Android开发常用的设计模式
Android常用的设计模式有如下几种:单例模式、Build模式、观察者模式、原型模式、策略模式设计模式的六大原则:https://mp.csdn.net/postedit/796232061、单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这样做有以下几个优点对于那些比较耗内存的类,只实例化一次可以大大提高性能,尤其是在移动开发中。保持程序运行的时候该中始终只有一个实例...
2018-03-30 17:56:51 198
原创 ReactNative遇到的问题
一、ReactNative环境的搭建https://reactnative.cn/docs/0.51/getting-started.html二、Unable to load script from assets 'index.android.bundel'. Makve sure your bundel is packaged corredtly or you're running a pack...
2018-03-30 14:19:43 356
原创 OkHttp源码分析
//得到OkHttpClient对象 OkHttpClient mOkHttpClient = new OkHttpClient(); //构造Request对象 Request.Builder builder = new Request.Builder(); Request request = builder.get().url(requestUrl).bui...
2018-03-28 18:09:32 272
原创 Android Data Binding
1、我的gradle版本是2.0.0,所以在app的build.gradle中配置 //开启DataBinding dataBinding { enabled true; }2、布局方式使用 Data Binding 之后,xml的布局文件就不再单纯地展示 UI 元素,还需要定义 UI 元素用到的变量。所以,它的根节点不再是一个 ViewGroup,而是变成了 layou...
2018-03-27 15:22:44 182
转载 Android App的三种架构模式MVC,MVP和MVVM
原文地址:选择恐惧症的福音!教你认清MVC,MVP和MVVMhttp://www.2cto.com/kf/201506/405766.htmlMVC使用总结利用MVC设计模式,使得这个天气预报小项目有了很好的可扩展和维护性,当需要改变UI显示的时候,无需修改Contronller(控制器)Activity的代码和Model(模型)WeatherModel模型中的业务逻辑代码,很好的将业务逻辑和界面...
2018-03-26 18:21:53 300
原创 Gradle使用之依赖树
切换到要查看项目的目录,执行命令gradlew :app:dependencies,查看依赖树从上图可以看出红色框中有开源库以来的版本比当前的版本低,因此可以使用exclude剔除旧版本库,避免重复,也可以瘦身apkcompile ('com.jakewharton:butterknife:8.8.1'){ exclude module: 'support-annotations' ...
2018-03-26 15:13:46 11539
原创 Gradle使用之环境变量的配置
第一步、我的电脑右键属性-根据下图找到环境变量的第二步、按照下图定义环境变量,gradle的路径到bin目录第三步:Path路径配置%GRADLE_HOME%;第四步、出现如下界面代表配置成功...
2018-03-26 14:13:45 2981
原创 动态代理
一、代理模式1. 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用2. 代理模式一般涉及到的角色(1)抽象角色:声明真实对象和代理对象的共同接口(2)代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真...
2018-03-21 11:20:09 129
转载 浅谈IntentService
ServiceService 不是一个单独的进程,它和应用程序在同一个进程中,Service 也不是一个线程,它和线程没有任何关系,所以它不能直接处理耗时操作。如果直接把耗时操作放在 Service 的 onStartCommand() 中,很容易引起 ANR .如果有耗时操作就必须开启一个单独的线程来处理。IntentServiceIntentService 是继承于 Service 并处理异步...
2018-03-20 17:27:42 196
原创 浅谈BroadcastReceiver和EventBus
EventBus是一个发布 / 订阅的事件总线。简单点说,就是两人约定好怎么通信,一人发布消息,另外一个约定好的人立马接收到你发的消息。EventBus就可以帮减少很多事,不管你在任何地方任何位置发布一个事件,接收者都能立马接收到你的消息,不用你考虑android子线程操作UI线程的问题。 本地广播是相对消耗时间、空间最多的一种方式,但是大家都知道,广播是四大组件之一,许多系...
2018-03-20 16:32:44 1053
原创 浅谈Android广播之LocalBroadcastManager理解
在Android系统中,BroadcastReceiver的设计初衷就是从全局考虑的,可以方便应用程序和系统、应用程序之间、应用程序内的通信,所以对单个应用程序而言BroadcastReceiver是存在安全性问题的,相应问题及解决如下: 1、当应用程序发送某个广播时系统会将发送的Intent与系统中所有注册的BroadcastReceiver的IntentFilter进行...
2018-03-20 16:14:05 635
转载 Java设计模式的六大原则
一.单一职责原则 单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。单一职责原则定义如下:单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。 单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责...
2018-03-20 13:59:09 2319
原创 JAVA模式的六大原则之开闭原则
一、开闭原则的定义 开闭原则明确的告诉我们:软件实现应该对扩展开放,对修改关闭,其含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化的。那什么是软件实体呢? 软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。 抽象化是开闭原则的关键。二、开闭原则举例 以销售水果为例,可以 销售苹果、梨等水果,水果...
2018-03-20 11:18:51 909
转载 TTP中get与post的区别
了解历史get和post是HTTP与服务器交互的方式, 说到方式,其实总共有四种:put,delete,post,get。 他们的作用分别是对服务器资源的增,删,改,查。 所以,get是获取数据,post是修改数据。但是,现在大家都不这么干了! 只用一个方式就可以做增删查减的操作。 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。区别分析get把请求的数据放在url上,即HTTP协...
2018-03-19 18:20:12 504
原创 JAVA面试试题
1、对象和实例的区别有一种对象只叫对象,有一种对象叫实例化对象(实例)。我们知道抽象类是不可以被实例化的,那它的对象就不能叫实例化对象,只能叫对象,如下:Type type = typeof(int);//Type是抽象类,不允许实例化,这里的type是Type类的对象,而非实例化对象(实例)而普通类的对象,既可以叫对象,也可以叫实例化对象(实例),如下:class Person{}class P...
2018-03-19 18:09:46 161
转载 内存泄漏
简介编辑内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏缺陷具有隐蔽性、积累性的特征,比其他内存非法访问错误更难检测。因为内存泄漏的产生原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷。此外,内存泄漏通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的情况...
2018-03-16 18:16:48 272
转载 Android中常见的内存泄漏
我们经常会在不经意间写出造成内存泄漏的代码,往往在代码上很难查出来。但是我们可以通过一些辅助工具来检测是否存在内存泄漏,比如通过AndroidStudio的monitors来查看内存的变化情况,或者是通过开源框架《LeakCanary》来检测。本文主要是从网络中搜索汇总一些常见的内存泄漏,一方面自己应对校招,另一方面以后自己写代码时也会注意这些问题。当然了,还有一方面就是方便大家~1 Activi...
2018-03-16 18:12:15 126
转载 内存泄漏工具LeakCanary
1.添加依赖:debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3' 用法监控 Activity 泄露我们经常把 Activity 当作为 Context 对象使用,在不同场合由各种对象...
2018-03-16 17:59:13 305
原创 WebVuew性能优化之内存泄漏
WebView的内存泄漏处理方式有两种,分别是开启独立的web进程、不在xml里面声明,而是直接代码new个对象,传入application context防止activity引用滥用,并反射回收第一、开启独立的web进程 1.1 在manifest配置如下: <activity android:name="com.example.de...
2018-03-16 14:55:38 1099
转载 WebVuew性能优化之页面加载速度优化
页面加载速度优化影响页面加载速度的因素有非常多,我们在对 WebView 加载一个网页的过程进行调试发现,每次加载的过程中都会有较多的网络请求,除了 web 页面自身的 URL 请求,还会有 web 页面外部引用的JS、CSS、字体、图片等等都是个独立的 http 请求。这些请求都是串行的,这些请求加上浏览器的解析、渲染时间就会导致 WebView 整体加载时间变长,消耗的流量也对应的真多。接下来...
2018-03-16 14:00:10 6201
原创 Android框架模式MVP
第一、基本概念MVP是模型(Model)、视图(View)、主持人(Presenter)的缩写,分别代表项目中3个不同的模块。 模型(Model):负责处理数据的加载或者存储,比如从网络或本地数据库获取数据等;视图(View):负责界面数据的展示,与用户进行交互;主持人(Presenter):相当于协调者,是模型与视图之间的桥梁,将模型与视图分离开来。 MPV 是从经典的MVC模式演变过来...
2018-03-13 15:27:16 303
原创 Android性能优化总结
Android对于性能优化方面主要有一下几方面理解:第一、页面的绘制简化页面UI结构,复杂的UI布局会导致大量View重叠,出现过度绘制的可能性比较大,要避免布局嵌套过多,例如一般情况下,优先使用LinearLayout布局。复用背景色,例如如果父布局和子View背景色是相同的,只需要父布局设置背景色即可,子View不用设置。第二、布局的优化布局的选择,能满足需求的情况下优先选择LinearLay...
2018-03-12 15:20:26 236
转载 Android系统中的进程管理:进程的创建
概述Android系统以Linux内核为基础,所以对于进程的管理自然离不开Linux本身提供的机制。例如:通过fork来创建进行通过信号量来管理进程通过proc文件系统来查询和调整进程状态 等对于Android来说,进程管理的主要内容包括以下几个部分内容:进程的创建进程的优先级管理进程的内存管理进程的回收和死亡处理本文会专门讲解进程的创建,其余部分将在后面的文章中讲解。主要模块为了便于下文的讲解,...
2018-03-09 18:05:42 269
转载 Android进程管理(1)
不用在意剩余内存的大小.其实很多人都是把使用其他系统的习惯带过来来了.安卓Android大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系.如果你知道Java,就能更清楚这机制了.其实和java的垃圾回收机制类似,系统有一个规则来回收内存.进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西.当然这个值默认设置得很小,所以你会看到内存老在很少的...
2018-03-09 17:37:49 169
原创 浅谈Arraylist、LinkedList、Vector
第一、ArrayListArrayList:底层数据结构是数组,数组的物理地址是连续的,可以通过位置快速定位到具体元素的地址,所以改查效率高 但是如果是增加和删除元素时,可能会涉及到新建数组,复制元素,移动元素等操作,比较耗时,所以增删效率低ArrayList是命名空间System.Collections下的一部分,在使用该类时必须进行引用,同时继承了IList接口,提供了数据存储和检索。Arra...
2018-03-09 17:08:34 193
转载 普通for循环和增强for循环的使用小结
for循环分为两种:第一种为普通的for循环 这种for循环通常需要三个步骤即 for(初始表达式;条件表达式;递增表达式)有时候递增表达式也可以省去,一般是在使用Iterator迭代时(Iterator的hasNext方法判断时,可以省去递增表达式)。这种for循环很常用。第二种为增强的for循环(也就是foreach循环) 这种for循环的内部是调用了Iterator实现的(实现了...
2018-03-09 15:52:41 2580
转载 Http、TCP/IP协议与Socket之间的区别
1、TCP/IP连接手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ac...
2018-03-09 15:18:39 177
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人