自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (2)
  • 收藏
  • 关注

原创 升级gradle版本报错

修改gradle-wrapper.properties中的distributionUrl,然后sync时报错,信息如下: Gradle’s dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)Re-download dependencies and sync project (requires network) The state of a Gradle bui.

2020-07-27 14:39:13 1849

原创 RxJava 源码分析

首先分析Observable.create操作符例子:Observable observable = Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(@NonNull ObservableEmitter<String&gt...

2020-05-06 13:44:54 179

原创 项目中遇到的关于RecyclerView界面刷新问题

实现RecyclerView带过滤功能遇到的问题复现路径:首先没有过滤出任何元素,界面显示空白,此时很正常,然后清楚过滤关键字,此时应该显示全部数据,但是却显示空白,onBindViewHolder()已经调用。最后发现是由于调用了smoothScrollToPosition方法引起的,但是smoothScrollToPosition却是因为RecyclerView的width设置为wra...

2020-04-08 13:38:20 1087

原创 Android studio 编译NDK--使用cmake

以编译LibJpeg为例,方便理解。1.把下载下来的libjpeg库中的所有文件都放在src/main/cpp 文件夹下:2.libjpeg库中已经写好了CMakeLists.text,只需要引用一下就可以了,如果没有则需要自己编写CMakeLists.txt3.编译之后会生成so库和必要的头文件:4.编写C文件,把所需要的头文件放入cpp文件夹下...

2020-03-31 16:04:46 348

原创 APKTool 使用

1.java -jar apktool.jar d -f test.apk -o testtest.apk要解析的apk, -o test 设置输出目录, apktool.jar 是工具名称解析出res目录和Manifest2.cd到 d2j-dex2.jar所在的目录,解压apk文件,取出dex文件放到该目录下,运行命令:d2j-dex2jar classes.dex生成c...

2019-12-18 16:27:34 314

原创 startActivities(intents)注意点

若有两个Intent采用startActivities方式启动,Intent[0] = new Intent(this,TestActivity1.class);Intent[1] = new Intent(this,TestActivity2.class);1.如果要启动的两个activity的theme不是透明主题,android:windowIsTranslucent 不是...

2019-12-13 11:18:30 600

原创 Kotlin ? !! ?:含义

Kotlin中:1. ?代表该值可为空camera?.stopPreview()如果camera为空,则不执行后面的程序;若不为空,则执行后面的程序;2. !!表示该值一定不为空3. ?: 与java三目运算符?:类似,但写法不同java:String name= nameUtils!= null ? nameUtils.getName() : "android"...

2019-09-23 15:35:01 2086

原创 ListView和RecyclerView中item长按后拖拽

由于ListView在Dialog里面,所有用WindowManager的方式不合适,又从网上参考了一些资料后实现:主要参考大神:https://github.com/1993hzw/Androids/blob/master/README_DragListView.mdListView 中的item长按后拖拽:需要重写ListView,在DispatchTouchEvent中拦截事件,...

2019-09-06 11:52:16 441

原创 特殊问题:RelativeLayout中的最后一个控件的layout_marginBottom无效的问题

出现此问题的前提是:在ViewPager+fragment实现的页面切换,在其中一个fragment的布局中,根布局是RelativeLayout;解决方式:按照网上所说的方法在最后添加一个宽高为0的View;但此时不行,我上一个布局如下:<ImageView android:id="@+id/iv_right" android:layout_width="70dp...

2019-05-31 11:42:57 937

原创 layout_weight属性

layout_weight属性是LinearLayout中的属性如果是水平方向,则要看layout_width属性;如果是垂直方向,则要看layout_height属性;以水平方向举例:layout_width="match_parent"有三个button:layout_weight比例为1:2:2计算公式为:1:parent_width + 1/5*(parent_wi...

2019-05-09 14:47:58 175

原创 Thread和Runnable区别

Thread是类,Runnable是一个接口,runnable可以突破单继承的限制runnable更容易实现资源共享,能被多个相同代码的线程去处理同一个资源;比如:自定义的runnable->runnable1new Thread(runnable1).startnew Thread(runnable1).startnew Thread(runnable1).start...

2019-04-04 09:49:14 188

原创 Thread.start 和run的区别

thread.start()是启动线程,使线程进入就绪状态,启动一个新线程,在新线程中执行run方法;调用start()方法后,,可以继续执行下面的代码;run是thread中的一个方法,调用thread.run()后,需要等待run方法执行完毕后才能执行后面的代码,不会启动一个新线程,还是在本线程中执行;...

2019-04-04 09:22:14 261

转载 requestLayout 和 invalidate区别

View绘制分三个步骤,顺序是:onMeasure,onLayout,onDraw。调用invalidate方法只会执行onDraw方法;调用requestLayout方法只会执行onMeasure方法和onLayout方法,并不会执行onDraw方法。所以当我们进行View更新时,若仅View的显示内容发生改变且新显示内容不影响View的大小、位置,则只需调用invalidate方法;若Vi...

2019-03-28 15:59:11 735

原创 TCP

TCP采用三次握手确认建立一个连接;位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)第一次握手:客户端发送位码为syn=1...

2019-03-28 11:02:03 108

原创 IntentService

IntentService,可以看做是Service和HandlerThread的结合体,在完成了使命之后会自动停止,适合需要在工作线程处理UI无关任务的场景。IntentService内部使用的是HandlerThread 和Handler,HandlerThread是在Thread的run方法中初始化loop,调用Loop.prepare(),Loop.loop(),线程中有了loop...

2019-03-28 10:04:12 87

原创 OKHttp3源码解析

总体流程:okHttpClient = new OkHttpClient.Builder() .addInterceptor(new TokenInterceptor()) .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .build();通过builder模式建造okhttpclie...

2019-03-22 11:23:24 133

原创 Service: onStartCommand 的返回值

public @StartResult int onStartCommand(Intent intent, @StartArgFlags int flags, int startId) { onStart(intent, startId);有四种返回值:1.START_STICKYservice会重启,调用oncreate onStartCommand(),但是startId...

2019-03-22 10:09:37 285

原创 clearCallingIdentity和restoreCallingIdentity

在IPC时,有些情况需要调用clearCallingIdentity和restoreCallingIdentity,原因在于:假如有A进程和B进程,A调用B,B需要知道A的UID和PID,用于权限检测,于是B就保存了A的UID和PID,当此时B调用本身的方法时,binder驱动会检测B调用的是远成进程还是本地进程,如果是本地进程就不会传UID和PID,但此时B保存的仍然是A的UID和PID,所...

2019-01-18 10:47:54 894

原创 权限申请

1.先定义一个常量数组,把Manifest中声明的权限加进去,如下:/** * 所需的所有权限信息 */private static final String[] NEEDED_PERMISSIONS = new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permissi...

2019-01-18 10:15:33 729

原创 热修复之代码修复

热修复主要有三种方案:1.底层替换 2.类加载 3.Instant Run方案1.底层替换方案主要利用反射原理,在反射用到的结构体ArtMethod,替换ArtMethod结构体,使其指向修复好的方法。利用Native反射替换要修复的类的方法的信息(执行入口、访问权限、所属类、代码执行地址等) 即时生效,但由于基于Native层直接替换原有类,限制多,无法增减原有类的方法和字段2...

2019-01-10 14:50:42 590

原创 线程池的execute() 方法的执行机制

execute() 方法的执行机制工作线程数小于核心线程数时,直接新建核心线程执行任务; 大于核心线程数时,将任务添加进等待队列; 队列满时,创建非核心线程执行任务; 工作线程数大于最大线程数时,拒绝任务...

2019-01-09 19:58:01 8016

原创 解决由单例引起的内存泄漏问题

单例对象的生命周期是根据context变化,如果Context使用的是当前Activity或者Fragment中的上下文,则生命周期较短,因此,当生命周期较长的对象引用了“较短”的上下文,会出现这样的情况,当Context所属的Activity或者Fragment 生命周期结束时(可能执行了onDestroy),Java的垃圾回收机制尝试回收该Activity时发现该类还存在引用(单例对象持有了这...

2019-01-08 17:29:06 759

原创 EventBus

 三要素:1.event2.subscriber3.publisher四种线程模型:1.POSTING (默认) 表示事件处理函数的线程跟发布事件的线程在同一个线程2.MAIN 表示事件处理函数的线程在主线程(UI)线程3.BACKGROUND 表示事件处理函数的线程在后台线程4.ASYNC 表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行...

2019-01-04 18:03:44 212

原创 onSaveInstanceState()和onRestoreInstanceState()

onSaveInstanceState(Bundle outState)在什么时机会被调用? onSaveInstanceState(Bundle outState)会在以下情况被调用: 1、按下HOME键时。 2、从recent中选择运行其他的程序时。 3、按下power键时。 4、一个activity启动一个另一个activity时。 5、屏幕方向切换时。onRestoreI...

2019-01-03 15:02:37 190

转载 【转】Android插件化原理解析——概要

转载:http://weishu.me/2016/01/28/understand-plugin-framework-proxy-hook/随着业务的发展各大厂商都碰到了Android Native平台的瓶颈:从技术上讲,业务逻辑的复杂导致代码量急剧膨胀,各大厂商陆续出到65535方法数的天花板;同时,运营为王的时代对于模块热更新提出了更高的要求。 在业务层面上,功能模块的解耦以及维护团...

2018-12-29 14:57:34 169 1

原创 ViewPager Fragment切换刷新数据

在需要刷新的fragment中重写下面的方法:@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); Log.i(TAG,"setUserVisibleHint"); //加载数据}...

2018-12-05 16:30:20 2440

原创 《android源码设计模式》读书笔记----单例模式

单例模式应用场景:确保某个类有且只有一个对象,避免产生多个对象消耗过多的资源。例如访问I/O、数据库资源等;单例模式关键点:1.构造函数私有化2.通过静态方法或者枚举返回单例对象3.确保单例类有且只有一个4.确保单例类在反序列化时不会重新构建对象实现方式:1.饿汉式public class Singleton { private Singleton(){}...

2018-11-14 16:31:40 138

转载 图片缓存

public class ImageLoader { ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); //内存缓存 ImageCache mImageCache = new MemoryCache();...

2018-11-14 11:18:02 439

原创 JNI开发流程

1.首先在JAVA中声名native方法,native方法需要C或C++实现,使用时需要加载动态库,如:static{System.loadLibrary("xxx");}2.编写JNI的头文件,XXX.h,也可以使用弓箭自动生成。函数名格式:Java_包名_类名_方法名JNIEnv * 表示一个指向JNI环境的指针,可以通过它来访问JNI提供的方法jobject 表示...

2018-11-05 22:35:40 72

超市进销存之销售部分UML

超市进销存销售 UML用例图 类图 序列图 状态图 活动图,自己写的,可以参考下

2011-12-21

超市进销存管理系统数据流图

超市进销存管理部分系统数据流程图,看看有帮助没

2011-12-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除