- 博客(38)
- 问答 (1)
- 收藏
- 关注
原创 Android实现多线程断点续传下载
前言我们常常在开发过程中会遇到下载的功能实现,当我们下载中断时,又不希望下次从头开始继续下载,我们就需要用到断点续传了。断点续传原理断点续传是指当下载中断后,再次下载时可以从上次的下载进度继续下载。由此我们可以分析得出实现这个功能,我们需要实时保存下载进度,这样在下次继续下载的时候再把下载进度读取出来,继续下载。我们主要需要解决俩个问题:一、从上次的位置继续下载。二、从上次写入的文...
2018-03-16 17:36:38
376
原创 RecyclerView实现上拉加载更多
RecyclerView的封装以实现下拉加载更多下拉加载更多功能是怎么实现的呢? 当实现recyclerview的时候,通常需要实现adapter跟viewholder,首先我们要明白adapter里面各个方法的调用顺序。 1. 首先调用getItemCount(),作为recyclerview里的item数量 2. 调用getItemViewType(int position),该方法返回一
2017-08-16 22:10:32
9142
2
原创 android 线程池源码解析
先从俩个概念说起在源码中我们常常能看到这么俩个变量:ctl,worker。ctlctl是什么呢? ctl在源码里的解释是: The main pool control state, ctl, is an atomic integer packing two conceptual fields 1.workerCount, indicating the effective number of t
2017-07-24 11:24:46
726
原创 DexClassLoder解析
Android类装载器DexClassLoader的简单使用DexClassLoader 可以加载外部的 apk、jar 或 dex文件,在java中,有个概念叫做“类加载器”(ClassLoader),它的作用就是动态的装载Class文件。1. ClassLoader 的基础知识ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由C
2017-04-01 10:35:32
1035
原创 BaseDexClassLoder源码
/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You
2017-03-29 09:31:00
1839
1
原创 自定义View知识梳理
1.自定义View的构造函数调用时机public class MyView extends View { public MyView(Context context) { //在代码中实例化View时调用这个构造函数 super(context); } public MyView(Context context, AttributeSet at
2016-12-20 11:42:03
310
原创 Messenger浅析
Messenger可以实现在不同进程之间传递Message对象,Messenger底层基于AIDL,并且一次处理一个请求,因此不需要考虑线程同步问题。服务端:public class MessengerService extends Service { private final static int FROM_Client=1; private static class Messeng
2016-12-05 10:15:16
194
原创 android动态加载
android插件化必须要解决的三个问题:资源访问、Activity生命周期的管理和ClassLoader的管理。 android中对资源的访问都是通过Resources这个类来实现的。可以认为,所有涉及到获取资源的地方,都可以使用Resources来获取。 通过AssetManger的addAssetPath这个方法,我们可以指定要加载的资源路径。由于addAssetPath这个方法被隐藏了,
2016-12-04 21:58:13
262
原创 Java之反射
Class类每一个类都对应着一个Class类,它是由Java虚拟机生成的,这个类保存着Java运行时类型信息(虚拟机利用运行时类型信息执行相应的方法)。 简而言之就是:每个类都有一个Class对象,这个Class对象有Java虚拟机生成,这个Class对象保存着该类的运行时信息(比如域,方法,等等)。通过这个Class类我们可以访问这些信息如何获取Class实例俩种方法: 一、通过getClas
2016-11-19 19:45:26
279
原创 再谈RecyclerView
上次写了一篇recyclerview的简单使用方法:http://blog.youkuaiyun.com/allbule/article/details/52589397这次想来再谈谈recyclerview,当我们想要实现在同一个recyclerview里面出现不同的Item项,我们该如何定制一个recyclerview。定制recyclerview 涉及到俩个类,一个是RecyclerView.Adapte
2016-11-03 22:49:17
334
原创 新闻类客户端代码阅读笔记
ButterKnife这个开源库可以让我们从大量的findViewById()和setonclicktListener()解放出来@Bind(R.id.toolbar) Toolbar toolbar;//相当于 Toolbar toolbar=(Toolbar) findViewById(R.id.toolbar)@Bind({R.id.tab_news, R.id.tab_pictures,
2016-10-25 21:45:25
352
原创 回调接口实现Activity与Fragment之间的通信
话不多说直接贴出代码://MainActivitypublic class MainActivity extends AppCompatActivity implements MyFragment.CallBacks{public void doSomething(){ }...}public class MyFragment extends Fragment{private CallBac
2016-10-22 15:35:53
310
原创 inflate中三个参数的含义
inflate三个参数如下:public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)第一个参数是指定要加入父布局的布局文件,第二个参数是视图的父视图,第三个告知布局生成器是否将生成的视图添加给父视图。什么是将生成的视图添加给父视图呢?举个例子,比如在activity中已经加
2016-10-21 10:44:25
4755
原创 android数据解析之Json
Json解析相比pull有解析快,操作简单的特点。使用Json前我们先来了解Json。Pull解析可以看这篇:http://blog.youkuaiyun.com/allbule/article/details/52832422Json数组数组以“[]”包括,数据的对象用逗号隔开。像这样: [{ "name":"JSON",
2016-10-17 10:30:12
296
原创 XML解析之Pull解析方式
XML文件:<apps> <app> <id>1</id> <name>gogle</name> <version>1.0</version> </app> <app> <id>2</id> <name>Chrome</name> <version>2.0</version>
2016-10-16 19:52:00
428
原创 SearchView提交搜索后收起键盘及SearchView视图
前几天做SearchView时,想要搜索提交后就收起键盘及SearchView视图,找了找资料,可以这么做:@Overridepublic boolean onQueryTextSubmit(String query) { ... updateItems(); searchView.setQuery("", false); s
2016-10-13 17:04:16
6982
2
原创 MySQL入门篇(二)数据库的基本操作
数据表的基本操作创建数据表以下为创建MySQL数据表的SQL通用语法:CREATE TABLE table_name (column_name column_type);验证数据表是否成功,可以用SHOW TABLES 语句查看。查看数据表1.使用 SHOW CREATE TABLE 查看数据表 SHOW CREATE TABLE不仅可以查看建表语句,还可以看表的字符编码。 格式:SHOW CR
2016-10-12 22:10:52
618
原创 MySQL入门篇(一)
创建和查看数据库语句:创建一个数据库: CREATE DATABASE 数据库名;查看数据库: SHOW DATABASES;查看创建好的数据库信息: SHOW CREATE DATABASE 数据库名;改变数据库编码: ALTER 数据库名 CHARACTER SET 编码 COLLATE 编码方式_bin;删除数据库: DROP DATABASE 数据库名; 数据类型整数类型数据类
2016-10-12 20:40:02
403
原创 Intent使用Serializable以及Parcelable传递数据
使用SerializableSerializable是序列化的意思,表示将一个对象转换成可存储或可传输状态,序列化的对象可以在网上传输也可以存储到本地。序列化的方法只需要写一个类继承Serializable就可以了。如下:public class Person implements Serializable{ private String name; private int age;
2016-10-10 19:17:26
374
原创 android之IntentService
为什么使用IntentService我们知道Service的代码默认是运行在主线程之中的,如果在service中处理一些比较耗时的操作,就很容易出现ANR的情况,所以这时候就需要让这些耗时的工作放在子线程中。而我们往往又希望服务执行完后可以自动停下来,那么我们创建的服务就会像这样:public class MyService extends Service{ @Override pu
2016-10-10 18:57:57
247
原创 常见排序算法之快速排序
快速排序:算法思想:思想:找一个记录,以它的关键字作为“枢轴”,凡其关键字小于枢轴的记录均移动至该记录之前,反之,凡关键字大于枢轴的记录均移动至该记录之后。致使一趟排序之后,记录的无序序列 R[s..t]将分割成两部分:R[s..i-1]和R[i+1..t], 且 R[j].key≤ R[i].key ≤ R[j].key (s≤j≤i-1) 枢轴(i+1≤j≤t)。 例如:关键字序列 52
2016-10-09 21:12:22
823
原创 常见排序算法之直接插入排序
直接插入排序:算法原理:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。复杂度:时间复杂度 O(n2) ,空间复杂度O(1)稳定性:插入排序是稳定的,排序前后两个相等元素相对次序不变(能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式
2016-10-09 21:10:23
306
原创 常见排序算法之归并排序
归并排序算法思想:将待排序序列R[0…n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此反复进行下去,最后得到一个长度为n的有序序列。工作原理:第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置 第三步:比
2016-10-09 21:07:00
373
原创 常见排序算法之直接选择排序
直接选择排序:算法原理:直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,….,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,…..,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,
2016-10-09 21:04:38
317
原创 排序算法之堆排序
堆排序:什么是堆:堆是一颗完全二叉树。堆又分大顶堆跟小顶堆,大顶堆即其任意一个非叶子结点都不小于其子节点,即key[i]>=key[2*i+1]&&key[i]>=key[2*i+2],如下图: 小顶堆即其任意一个非叶子结点都不大于其子节点,即满足Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]。 如下图:堆排序复杂度:对于n个关键字序列,最坏情况下每个节点需比较log2
2016-10-01 19:13:49
1870
原创 常见排序算法之希尔排序
希尔排序:希尔排序是基于插入排序的一种改进。希尔排序基本思想:以下摘自文字摘自(写的确实很好): http://www.cnblogs.com/kkun/archive/2011/11/23/2260288.html 第一块希尔排序介绍准备待排数组[6 2 4 1 5 9]首先需要选取关键字,例如关键是3和1(第一步分成三组,第二步分成一组),那么待排数组分成了以下三个虚拟组:[6 1]一组[2
2016-09-30 22:35:18
1075
原创 常见排序算法之冒泡排序
一、冒泡排序:算法实现过程:1)首先,从第一个元素开始,比较该元素与该元素相邻的下一个元素的大小(即第一个元素与第二个元素的大小),如果该元素比较大则交换位置,否则不交换位置。 2)按照1的步骤不断重复的比较下一元素与其相邻元素之间的大小,直到第n-1个元素,第一趟比较结束。例如:接下去是第二个元素,重复 1 的步骤,比较其与其相邻下一元素大小(即第二个元素与第三个元素的大小),大则交换位置,否则
2016-09-29 21:52:26
326
原创 Java单例模式的写法
第一种写法: 懒汉式单例class Singleton{private static Singleton singleleton=null;pulic static Singleton getInstance(){ if(singleleton==null){ singleleton=new Singleton() } return singlelet
2016-09-27 22:39:36
391
原创 ViewPager之FragmentStatePagerAdapter小结
ViewPager简介:ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view。1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerA
2016-09-26 21:43:44
7073
原创 在RecyclerView当中使用 contextMenu
前几天想用contextMenu来实现recyclerview中的批量删除的功能,于是去官网找了找contextMenu是使用方法,通过registerForContextMenu(View v)注册了contextmenu后,发现onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)没有
2016-09-26 16:00:16
2364
原创 java io流
字节流与字符流: 在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个
2016-09-24 15:36:45
374
原创 android RecyclerView学习笔记
最近刚学了RecyclerView,就来总结下。RecyclerView的任务仅仅只是回收和定位。要想其显示数据还需要另外俩个类:Adpter子类以及ViewHolder子类。ViewHolder只做一件事:容纳View视图。RecyclerView自身并不创建视图,它创建的是ViewHolder,而ViewHolder引用着一个个ItemView。 典型的ViewHolder子类写法:priva
2016-09-19 21:14:12
464
空空如也
刚学linux网络编程,有个问题,listen( )函数可以用来监听其他电脑的端口吗?
2016-04-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人