- 博客(24)
- 资源 (1)
- 收藏
- 关注
原创 Android Connectivity学习笔记–Bluetooth
Android Connectivity学习笔记–Bluetooth1. 应用场景设备近距离传递数据的一种方式,无需通过网络连接,节省流量数据交换方便,理论上可传输任意类型数据2. 使用流程(1) 权限声明首先必须打开的是android.permission.BLUETOOTH权限,如果同时要将此应用做服务端使用(即监听客户端的连接),则同时应打开android.permission.BLUETOOTH_ADMIN权限(一般应用都需要实现这个功能),如下:<uses-permissi
2020-06-17 22:24:47
597
1
原创 Android架构组件--ViewBinding学习笔记
Android架构组件–ViewBinding学习笔记1.解决的问题ViewBinding的目的是为了减少样板代码findViewById(int)的使用,提升开发效率,精简Activity和Fragment的代码。2.使用ViewBindingViewBinding的使用需要Android Studio版本为3.6以上,需要在模块的build.gradle文件中手动开启,如下:android { ... buildFeatures { viewBinding =
2020-06-14 13:34:30
2908
1
原创 Android架构组件--App Startup学习笔记
Android架构组件–App Startup1.解决的问题一般需要初始化的sdk都会对外提供一个初始化方法供外界调用,如:public class App extends Application { @Override public void onCreate() { super.onCreate(); Sdk1.init(this); }}对调用者很不友好。另一种做法是使用ContentProvider初始化,如下:public c
2020-06-13 00:14:44
9715
6
原创 命名实体识别(NER)学习笔记
参考《python自然语言处理实战》命名实体识别(Named Entities Recognition,NER)是自然语言处理中的一个基础任务。主要分为实体类、事件类、数字类三大类和人名、地名、机构名、时间、日期、货币、百分比等小类。NER比较侧重召回率,即需要最大限度的找出给定句子中所有的命名实体。和分词一样,NER主要方法也分为三类,基于规则的、基于统计的、规则和统计相结合的方法。序列标注...
2020-02-23 14:00:25
1001
原创 中文分词技术笔记
参考《python自然语言处理实战核心技术与算法》分词是自然语言处理的一项核心技术。中文分词算法大致分为三类,基于规则的分词算法、基于统计的分词算法、两者结合的分词算法。一、基于规则的分词算法基于规则的分词算法核心思想是维护一个词表,收录所有可能词,分词时拿待切分的字符串和此表中的词逐一查询匹配。找到则切分出来,没找到则不切分。这种方法简单高效,便于理解,但是维护词表是一个很庞大的工程,而...
2020-02-13 21:04:11
508
原创 Android LayoutInflater工作流程
Android LayoutInflater工作流程我们在Fragment的onCreateView方法中需要返回这个fragment的view,通常我们这样写这样就可以从xml布局文件中解析出来view。那么inflate()方法的具体流程是什么样的呢?首先看一下方法的定义,这个方法定义在在源码的LayoutInflater.java中,流程如下:public View inflate...
2019-09-16 23:25:06
344
原创 EventBus使用及源码分析
EventBus使用及源码分析EventBus是为Android和Java设计的事件总线框架,主要为了实现组件间的通信。一、 简单使用官方文档有详细的使用说明。最简单的使用包括三个步骤:定义事件类,如:public static class MessageEvent { /* Additional fields if needed */ }监听事件:@Subscribepubl...
2019-09-06 00:14:58
338
原创 Class文件结构 学习笔记
参考《深入理解Java虚拟机》Class文件结构 学习笔记一、 class文件产生.java文件经javac编译生成.class文件,才能被虚拟机解析运行,class文件是一组以8位字节为基础单位的二进制流,所以称为字节码。二、 class文件结构1. 整体结构class文件采用类似C语言的结构体格式存储数据。只有两种类型:无符号整数、表。无符号整数u1、u2、u4、u8等通常用来描述...
2019-08-31 02:01:54
256
原创 GC 学习笔记
GC 学习笔记参考《深入理解Java虚拟机》一、对象是否存活主流的虚拟机通过“可达性分析”算法判断一个对象是否存活,从而回收死亡的对象的内存空间。算法从“GC Roots”中的对象出发查看所有的引用链,如果一个对象到“GC Roots”没有任何一个引用链,那么就判定这个对象不可达,可以回收。可以作为“GC Roots”的对象有:虚拟机栈引用的对象、方法区中静态属性引用的变量、方法区常量应用...
2019-08-30 17:13:27
155
原创 Android实时监听网络状态
Android实时监听网络状态Android手机在网络状态发生变化时会发出一条包含网络状态的广播("android.net.conn.CONNECTIVITY_CHANGE"),通过接收该广播可以实时监听网络状态,并在不同状态下执行相应的回调。我们可以做一个简单的封装以方便使用。首先是状态回调IOnNetworkStateChangedListener.java:/** * 对外接口,网络...
2019-08-21 01:56:36
1313
1
原创 简单封装RxBus
封装Rxbus在组件化的工程中,不同组件通常位于不同的模块中,实现组件间的通信有多种方案,最常用的是Eventbus,但是如果项目中有使用Rxjava的话,我们可以使用RxJava的响应式编程替换掉Eventbus,接下来我们将逐步探索RxBus的封装。1. 单一的订阅关系首先看一种错误的封装,如下:public class RxBus { private static vola...
2019-08-08 17:47:25
380
原创 Android IPC机制笔记
参考《Android开发艺术探索》一、 IPC简介IPC含义为跨进程通信,通常不同的APP运行在不同的进程中,当两个app需要交互时,就要跨进程进行通信;或者一个app开了多个进程,大部分情况下也是需要跨进程通信的。IPC有多种方式实现,有Bundle、文件共享、Messenger、AIDL、ContentProvider、Socket等。首先是IPC的基础部分二、IPC基础1.开启多...
2019-07-18 18:32:47
192
原创 Android端的图文混排
Android端的图文混排一、效果图二、主要功能基于html,可解析大部分html标签可添加自定义标签及其解析可自定义图片和链接的点击事件全部接口都有默认实现,采用链式调用,简介清晰(使用过Glide和RxJava的都懂)三、快速使用1.在工程根目录的build.gradle中添加依赖allprojects { repositories { goog...
2019-07-15 21:14:41
1418
3
原创 Java运行时数据区域学习笔记
一、Java运行时数据区域java运行时数据区域主要分为以下几个部分1.程序计数器程序计数器用来存储当前Java指令运行的位置,并指向下一条指令,占用的内存空间较小。对于一个处理器,Java多线程是通过划分时间片,在线程间切换来实现的,因此同一时间只有一个线程的指令在执行。所以每个线程都要有一个独立的程序计数器,保证切换到它时可以正确的执行下一条指令。如果执行的是java方法,这个计数器记...
2019-06-03 17:40:16
168
1
原创 RecyclerView异步加载图片
RecyclerView异步加载图片如何在不使用第三方图片加载框架的基础上实现RecyclerView和ListView的中实现异步加载图片功能?简单的方法是我们可以使用LruCache+AsyncTask结合的方式实现。大致思路是在onBindViewHolder()方法中根据key去内存缓存中对应的bitmap,如果找到了就直接显示,如果没有找到就开启一个异步任务去下载这个bitmap,下...
2019-05-30 23:02:47
3252
原创 LocalBroadcast的使用及简单分析
LocalBroadcast的使用及简单分析一、LocalBroadcast常用使用方式BroadcastReceiver(广播接收器)是Android的四大组件之一,可作为事件和数据传递的一种方式,支持一对多。广播主要有全局广播和本地广播之分。相较于全局广播,本地广播只在应用内传递数据,因此更加安全、高效。简单的使用方法如下:public class MainActivity extend...
2019-05-26 23:02:42
2940
1
原创 Handler的使用及简单分析
Handler的使用及简单分析一、Handler常用场景及使用方式Handler在经常用在线程间通信上,是Android中常用的异步消息处理机制。线程通信通常是主线程与子线程通信或者子线程之间互相通信,主线程与子线程之间通信又包括主线程向子线程发消息和子线程向主线程发消息。常用的写法如下:1.子线程发消息至主线程通常我们在子线程中进行耗时操作,比如耗时的计算、网络操作等,得到的结果通常需要...
2019-05-25 18:35:02
204
1
原创 仿知乎可拖动悬停按钮
仿知乎可拖动悬停按钮效果如下:实现的主要功能有:随手拖动响应点击事件全屏拖动,也可以限定位置可通过xml配置颜色和内部样式使用方法1.可以直接复制TrackView.java到自己的工程中。也可以下载trackview.aar放在libs包中,并在build.gradle中添加依赖使用2.在xml中配置属性(如果是复制的需要改成自己的包名,属性有默认值,也可以配置)<...
2019-05-11 23:43:13
1001
2
原创 封装一个实用的Android请求数据的工具类
在app开发过程中,我们经常需要从网络拉取数据然后在界面上显示,如果每次显示都从网络上请求数据,不仅会浪费流量,而且还会影响性能,一般我们会在本地缓存一份,当更新ui时有限从本地拿数据,手动更新时再从网络请求数据。这里分享一个使用Rxjava2实现的请求数据的工具类public abstract class QueryDataHelper<T> { /** * 请...
2019-03-22 21:08:06
434
原创 解决Android studio 出现Warning: Default Activity not found的方法
出现Warning: Default Activity not found是因为上一次强制退出导致as存储配置出错,解决方法:1.关闭as2.去安装路径找到AndroidStudio3.3 -> system -> caches3.删除caches这个文件夹4.重启as就可以了...
2019-03-12 20:55:20
6662
19
原创 tabLayout结合viewPager使用时tabLayout不显示
tabLayout结合viewPager使用时tabLayout不显示问题解决方案一般tabLayout结合viewPager使用的代码都是这样写的public class MainActivity extends AppCompatActivity { private static final String TAG ="MainActivity" ; List<MyFr...
2019-03-11 18:00:45
758
原创 设计模式学习笔记
迭代器模式现在有一个数据容器,里面存储着一个数据集合,如果要访问这个容器,则必然要对它进行遍历。可以把遍历、添加数据、数据的逻辑写在容器对象中,容器再提供一个遍历方法的接口。但是这样的设计不符合单一职责原则,一旦集合里面的数据量变大便难以维护。或者容器不实现遍历方法,由访问者实现,这样会导致容器内部的逻辑被公开,不符合封装原则。这时便要使用迭代器模式。迭代器模式的核心思想是让每一个数据容器提供...
2019-03-05 12:44:43
123
原创 设计模式学习笔记
访问者模式现在有一组结构固定的类,现在有多个业务,都是为了拿到这些类里面的信息然后再处理。由于不同的业务要拿到不同的信息。传统的做法就是依靠if-else分支来实现。这种方法在业务越来越多的时候将不利于维护。因此设计者模式便出现了。这里记录书上的一个例子来说明。公司高层在年终的时候对公司的员工进行年终奖考核,假设公司的高层只有CEO和CTO,员工只有工程师(engineer)和经理(mana...
2019-03-03 23:19:51
146
原创 android8.0以上版本的前台服务
android8.0以上版本的前台服务本人是小白,最近在学习郭林老师的第一行代码的第二版时,在第10章的前台服务的小节里面,发现在我的模拟器上运行不了,然后找了许多大神写的博客,发现原因是安卓8.0之后的前台服务需要使用startForegroundService()函数启动服务,然后按照大神的博客里面的步骤做了还不行,然后查看了一下错误日志,下面是程序崩溃时打印的error日志中的一部分2...
2018-12-13 12:41:08
10518
9
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人