自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 Android广播的两种注册方式及其区别

借鉴自第一行动态注册public class MainActivity extends AppCompatActivity { private static final String TAG = "xbh"; private IntentFilter intentFilter; private NetworkChangeReceiver ne

2018-01-30 22:22:10 2029

原创 Android之IntentService

借鉴自开发艺术构造方法中必须调用父类的有参构造IntentService是一个抽象类适合,需要高优先级的,短期的,后台耗时任务,执行完后会自动停止。封装了HandlerThread和Handler。@Overridepublic void onCreate() { // TODO: It would be nice to have

2018-01-30 20:52:13 203

原创 Android四大组件之服务

借鉴自第一行适合执行不需要和用户交互但是需要长期运行的任务。服务依然依附于App的创建服务时所在的进程,当这个进程被杀,服务也会终止。服务依然跑在主线程中,所以依然不可以写耗时操作,需要我们自行做好同步工作。在Handler中更新UI轻快敏捷的方式mHandler.obtainMessage(key,value).sendToTarget();Exp

2018-01-30 19:42:34 274

原创 Android活动的启动模式及常用的Activity的Flags

借鉴自开发艺术standard,有一种情况会出错getApplicationContext().startActivity(new Intent(this, Main2Activity.class));因为standard模式,是在前一个Activity的任务栈基础上,增加一个Activity。不管这个Activity来自哪个应用,都会在自己的这个栈的栈顶增加一个新的Act

2018-01-30 16:33:56 242

原创 Android跨进程通信之Binder连接池及选择合适的IPC方式

借鉴自开发艺术AIDL是最常用的多进程通信的技术,但是每次使用都要创建一个Service,开销太大,应该把所有的AIDL都放到一个Service里。每个业务模块都创建自己的AIDL接口并实现,业务模块间不能有耦合,然后向服务器提供自己的唯一标识和对应的Binder对象。对于服务端,1个Service足够了。服务端提供一个queryBinder接口,从中可以获取业务模块对应的

2018-01-30 00:15:17 485

原创 Android跨进程通信之Socket

借鉴自开发艺术Socket,套接字,分为流式套接字TCP,用户数据报套接字UDP。TCP面向连接,稳定,双向,有着经典的3次挥手、4次挥手,有超时重传机制UDP面向地址,不稳定,拥塞、复杂网络环境可能会丢失,但效率更高,双向权限uses-permission android:name="android.permission.INTERNET"/>uses-

2018-01-29 22:27:34 1517

原创 Android跨进程通信之ContentProvider

借鉴自开发艺术他的底层也是Binder系统预置了许多ContentProvider,比如通讯录信息,日程表信息等。要跨进程访问这些信息,只需要通过ContentProvider的query、update、insert、delete方法即可。getType用来返回一个Uri请求所对应的MIME类型(媒体类型),比如图片视频等。如果不关注这个,返回null或者*/*即可。根据B

2018-01-29 18:58:58 302

原创 Android自定义权限

借鉴自http://blog.csdn.net/u014088294/article/details/519242231.创建一个权限,在注册文件中permission android:name="com.example.test.permission.good" android:description="you are very good" android:p

2018-01-29 16:39:44 191

原创 Android跨进程通信之AIDL

借鉴自开发艺术Messenger就是消息队列形式的,不用考虑并发,只会一个个处理,所以不太适合并发的情况。而且Messenger无法实现跨进程调用服务端的方法。所以需要使用AIDL。AIDL是Messenger的底层实现。服务端需要先创建一个Service来监听客户端的连接请求。然后创建一个AIDL文件,将暴露给客户端的端口在这个AIDL文件中声明。最后在Service

2018-01-29 13:55:22 376

原创 Android重写Handler的内存泄漏及解决办法

为什么会内存泄漏匿名内部类会隐式包含外部类的引用,当内部类执行耗时操作后不正常关闭,会内存泄漏,导致外部类无法被回收。解决方法1写成静态内部类解决方法2private Handler mHandler = new Handler(new Handler.Callback() { @Override public boolean handleM

2018-01-28 23:56:39 435

原创 自动生成的AIDL找不到Parcelable自定义对象

是文件夹检索的问题默认只会检索java包下的东西sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java', 'src/main/aidl'] resources.srcDir

2018-01-28 15:49:16 1314

原创 Android跨进程通信之Messenger

借鉴自开发艺术跨进程通信方式:Intent附加extras共享文件BinderContentProviderSocketBundle不支持的类型传不了。一种特殊场景:A进程正在进行一个计算,计算完后,需要发送给B,而且开启B的一个模块。但是结果的类型Bundle不支持。这个时候可以让A用Intent开启B的服务,让服务进行后台计算,计算完后再开启B中的某

2018-01-28 14:13:15 643

原创 Android之Binder的使用及上层原理,Aidl自动生成binder

借鉴自开发艺术Binder是Android中的一个类,实现了IBinder接口IPC角度,是一种跨进程通信方式可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,Linux中没有这种通信方式Framework层,Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager等)和相应Manager

2018-01-27 19:28:54 452

原创 Android之Serializable和Parcelable实现序列化

通过Serializable方法其实只需要简单地继承Serializable接口即可,但是,最好添加一个serialVersionUID如果不添加,假设你序列化后的类修改了增删了几个成员变量,那么在你打算反序列化的时候就会不成功。因为在反序列化的时候,是需要serialVersionUID进行匹配的。序列化后的serialVersionUI标识和我们要反序列化成的类进行比较,可是这里没有,

2018-01-27 15:38:03 245

原创 Android开启多进程和因为虚拟机不同存在的问题

借鉴自开发艺术开启一个额外进程的两个方法1.在注册文件中给Activity指定process2.通过JNI在native层去fork一个新进程开启多进程的实战activity android:name=".Main2Activity" android:process=":good"/>activity android:name=".Main

2018-01-26 20:43:03 1048

原创 Android之View的TouchDelegate,你真的理解事件分发了吗???

有人问我 事件分发是分发给View的吗?我笃定的说是的,结果不是的。其实View有一个TouchDelegate,可以给他设置这样一个东西,来使得你的事件触摸范围会被增大!简直牛X!这个类的全部源码及部分注释public class TouchDelegate { /** * View that should receive forwarde

2018-01-26 18:56:39 800

原创 Android活动的生命周期之异常生命周期分析(三)

旋转屏幕时,activity会被重建(也可以控制其不被重建)这个时候,onSaveInstanceState会在onStop前被调用,和onPause之间没有固定时序。Activity在被重建的时候,会在onStart后调用onRestoreInstanceState,并把onSaveInstance中保存的bundle给onRestoreInstanceState(?)和onCrea

2018-01-26 11:57:12 312

原创 Android活动的生命周期之正常生命周期分析(二)

借鉴开发艺术当活动A启动了活动B,他们两个的生命周期方法是这样调用的:A:onPauseB:onCreateB:onStartB:onResumeA:onStop启动Activity的请求会由Instrumentation来处理,它通过Binder向AMS发送请求(ActivityManagerService),AMS内部维护一个ActivityStac

2018-01-26 00:16:31 256

原创 Android活动的生命周期之基础(一)

借鉴第一行4种状态运行暂停停止销毁3个时期完整生存期前台生存期 onResume到onPause这个阶段可见生存期 onStart到onStop这个阶段,可见,但是不进行交互别忘了restart启动一个对话框的时候,即原活动部分可见,这个时候,原活动不在栈顶,但是部分可见,是暂停状态书上的例子是对话框活动,通过

2018-01-25 23:04:40 214

原创 Genymotion运行ARM程序,install failed no matching abis failed to extract native libraries res = -113

Genymotion被坑了一把,arm library都不支持了,导致运行调用so库的app会报错:,install failed no matching abis failed to extract native libraries res = -113。网上找了许多解决方案,最后发现需要一个文件,拖进去就好了,而且版本不能太低https://pan.baidu.com/s/1jJRueYa

2018-01-24 23:57:04 509

原创 Android之SharedPreferencesUtils,支持对象,List

有3点厉害的地方1.使用方便,因为获取了泛型T的class2.用流处理对象的转化3.支持Listpackage com.example.test;import android.content.Context;import android.content.SharedPreferences;import android.util.Base64;import androi

2018-01-24 03:23:06 502

原创 Java把对象转化成流再转化成String,使用BASE64库加解密bytes

非常坑自定义对象转化成String,不同于普通String的转化,会丢失数据,所以需要BASE64的库这里用的是安卓的BASE64库,java的库网上也有规规矩矩的把对象转化成byte数组ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ObjectOutputStream objectOutput...

2018-01-24 02:18:53 2558

原创 Android极封Retrofit2+RxJava网络请求框架

说是极封,其实只是看起来极封new RetrofitUtils(LoginAPI.class) { @Override protected void onSuccess(com.alibaba.fastjson.JSONObject jsonObject) { }};其实真正的极封还需要考虑许多细节以及性能的优化,不过这里已经可以满足

2018-01-23 02:51:18 222

原创 java怎么不实例化一个对象但是可以获取其中的值

public class Book { public static final String url = "asfdafs";}获取这个属性Field field = Book.class.getDeclaredFields()[2];输出Log.i(TAG, field.get(null) + "");如果想获取你在编写的时候就赋予的值,必须把它弄成静态,只有这样才能在虚拟机开启的

2018-01-23 01:56:21 849

原创 java调用Object内的方法

class Book { int i = 1; public void setI(int i) { this.i = i; }}Book book = new Book();Object object = book;Method method = object.getClass().getDeclaredMethod("setI", int.cla

2018-01-23 00:33:54 1655

原创 java把对象转化成流,和把流转化成对象(包含clone机制+序列化机制)

类如下,这里为了测试 仅仅用了内部类class Book implements Serializable { int i = 1;}对象转化成字节Book b = new Book();ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ObjectOutputStream objectO...

2018-01-20 18:37:32 9150 8

原创 Android之Toolbar标题栏颜色渐变

仅仅调用RecyclerView中的api即可mRv.setOnScrollListener(new RecyclerView.OnScrollListener() { int titleHeight; @Override public void onScrolled(RecyclerView rv, int dx, int dy) { super.

2018-01-20 03:34:46 1185

原创 Android获取控件高度如何才能不为0

一句话,onCreate onStart onResume的时候,所有的View还没有被添加到视图树上,所以无法得到所以,需要重写onWindowFocusChanged方法,这个是所有的View被添加到视图上时会执行的方法@Overridepublic void onWindowFocusChanged(boolean hasFocus) { super.onWin

2018-01-20 03:06:14 287

原创 通过getChildAt的方式获取活动的控件+更方便的getChildAt方法

对于有起名困难症的人,可以不给控件设置id,仅仅获取根布局的实例,再用getChildAt方法去取 可是Fragment是可以获取的, 但是activity怎么获取其实activity也是接受view参数的,所以root = (ViewGroup) LayoutInflater.from(this).inflate(R.id.activity_main, null,

2018-01-19 19:57:41 1808

原创 java获取泛型参数(T.class)

public abstract class MyUtilsT> { MyUtils() throws Exception{ ClassT> tClass = (ClassT>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; Log.i(

2018-01-18 23:11:18 6492

原创 java获取一个类的Type

获取Class是轻而易举,getClass()即可,但是获取Type怎么获取呢?其实看一下源码就知道Class实现了Type接口,直接强转就可以Type t = ((Type)getClass());Log.i("xbh", t.toString());下面提供另外一种方式public class MyUtilsT> { private

2018-01-18 21:59:30 10415

原创 java擦拭法

网上关于擦拭法的解释不多这里用个例子来讲解泛型类public class MyUtilsT> { private T type_variable; MyUtils() throws Exception{ Type t = getClass().getDeclaredField("type_variable").getGenericTy

2018-01-18 21:52:52 587

原创 有向无回路图的最短路径和拓扑排序

先要了解无回路就是这种形式的所以如果没有这种形式的东西 就可以得出一个线性的图这就是拓扑排序做的事了得到这样一个图以后,就可以利用松弛技术了,只需要遍历每个点,再松弛每个点所指向的点的那条边即可。时间复杂度奇低

2018-01-18 17:46:20 749

原创 算递归式的时间复杂度

第一种 代换法 给他假设一个时间复杂度 然后去验证比如T(n)=2T(n/2)+O(n)我们就可以假设时间复杂度是nlgnT(n)=2T(n/2)+O(n)当c>=1的时候成立第二种 递归树法求出每一层的代价 根据总和 得出渐进复杂度上界 比上面的方法更加容易得出猜测第三种 主方法对T(n) = aT(n/b) + f(n)的形式有奇效分别对应了

2018-01-18 17:41:30 649

原创 分治法求得树的最大深度

先提供一种不是特别符合分治思想的思路 也很好int max = 0;void cal(Node *n, int depth) {    if(depth > max) max = depth;    if(n -> leftChild != NULL) cal(n -> leftChild, depth + 1);    if(n -> rightChild != NULL)

2018-01-18 17:34:56 315

原创 最近点对分治

先要排除一种思维 最短不一定是横坐标相近的两个点最短可能有这种情况.  . .所以就复杂了分成3份考虑左边右边中间先求出左边和右边的,左边和右边的最小值进行比较会得到一个最小值d(左边和右边通过递归的形式得到)用这个d去给中间的进行剪枝 如果是中间线正负d距离以外的,都剪枝,因为它不可能比d短。把中

2018-01-18 17:32:11 331

原创 堆排序

有两种形式1.大的数在堆的顶部2.小的数在堆的顶部就是从树的底层出发,汇集到顶部,使得最大的数到达了父节点。这个时候就得到了初始堆。然后把这个数放到最后一行的最后一个。但是这个时候初始堆的性质又不满足了,所以这个时候又从底层出发,使得大的数到达顶部(忽略那个放在最后的一个的最大的数)、这个时候再把最大的数放在刚刚最大的树的相近的位

2018-01-18 17:28:03 144

原创 归并排序

typedef struct Node {    int val;    struct *Node;}Node, LinkedList;int main() {}void cal(Node *L, int left, int right) {    if(left         int j = (int) sqrt(right - left

2018-01-18 17:24:02 171

原创 Bellman-Ford和松弛技术

适用条件 有向图 但是没有负环比之迪杰斯特拉 在于他可以计算负的权值边负环是什么环负环就是至少有一条边是负数松弛技术这里是发现了2+2=4所以不能是负环,因为这样下去,会一直更新,越来越小,可以自行体会所以Bellman-Ford就是遍历所有的边,这个遍历需要进行点的个数的次数。

2018-01-18 17:22:35 756

原创 本地MVP模式,不用MVC、MVP、MVVM,也能分离业务和UI

仅属个人想法的记录,见谅我们使用这些模式完全是因为为了解耦业务和UI,能让我们做UI的时候可以专心做UI,做业务的时候就专心做业务。但是他创建许多接口和类,开销有点太大了,所以我们采用本地MVP模式,即把本该放在3个类里的东西放在一个类里又使他不显得过于臃肿,又可以具有解耦业务和UI的能力,对新手和老手都很适合。mvp其实就是view层更新ui,model进行的是业务处理,

2018-01-14 23:41:27 215

空空如也

空空如也

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

TA关注的人

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