<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Chen_dSir的博客]]></title><description><![CDATA[无端坠入红尘梦，惹却三千烦恼丝．]]></description><link>https://blog.youkuaiyun.com/Chen_dSir</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Chen_dSir]]></copyright><item><title><![CDATA[Android热修复原理-类加载机制与反射]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/109843412</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/109843412</guid><author>Chen_dSir</author><pubDate>Fri, 20 Nov 2020 15:13:04 +0800</pubDate><description><![CDATA[1，热修复方案:

(1) 阿里的AndFix 补丁方案，通过natvie层hook住带有bug的方法从而替换Java层的代码 。四五年没有维护了，应该是被弃用了，因为是通过C++代码来完成类的替换。实际就是反射拿到旧的类class，然后再把补丁包里面的class进行一个赋值，例如 old.class = new.class. 是可以立即生效的。

(2) 美团的Robust 补丁方案 ，就是在编译打包的阶段对每个函数都加入修复的代码。有点类似代理，将方法执行的代码重定向到修复了的方法中去。（运用了字节..]]></description><category></category></item><item><title><![CDATA[Java的反射基础与常用方法]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/107956748</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/107956748</guid><author>Chen_dSir</author><pubDate>Wed, 12 Aug 2020 16:49:43 +0800</pubDate><description><![CDATA[一、什么是java反射

    java的反射机制是指在运行状态中，对于任意的一个类，都能获取到这个类的属性和方法，无论是private还是public。对于任意的一个对象，都能调用到它的任意一个方法和属性，无论是private还是public。这种动态获取类的信息和动态调用对象的方法，我们叫做java的反射机制。当然这种机制如果自己使用不当，在一定程度上破坏了java面向对象的封装性。

二、java反射实例和用法

    下面有个person的bean对象，我们就用这个简单的例子来学...]]></description><category></category></item><item><title><![CDATA[Android只能主线程中更新UI吗？]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/107153445</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/107153445</guid><author>Chen_dSir</author><pubDate>Mon, 06 Jul 2020 12:18:09 +0800</pubDate><description><![CDATA[许多人都是人云亦云，自己却从来没有实践过，然而纸上得来终觉浅，绝知此事要躬行。我们先来简单的看下这个代码：


public class MainActivity extends AppCompatActivity {
	private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);...]]></description><category></category></item><item><title><![CDATA[Retrofit2.0结合okhttp3来使用拦截器给GET或者Post请求添加固定参数（详细步骤)]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/103969302</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/103969302</guid><author>Chen_dSir</author><pubDate>Tue, 14 Jan 2020 11:14:13 +0800</pubDate><description><![CDATA[1：首先使用OkHttpClient新建一个builder.（这里面的connect、writer、read如果只是测试可以不添加)


       OkHttpClient.Builder U1builder = new OkHttpClient().newBuilder();
        U1builder .connectTimeout(DEFAULT_TIMEOUT, TimeUni...]]></description><category></category></item><item><title><![CDATA[Dagger2初探(一)]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/102455370</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/102455370</guid><author>Chen_dSir</author><pubDate>Wed, 09 Oct 2019 11:20:04 +0800</pubDate><description><![CDATA[Dagger2是Android中依赖注入的一个类库，主要就是用来实现自动实例化的，也就是说我们不需要通过new这个关键字来实例化某个对象。而是通过Dagger2的依赖注入方式来实现.它的好处就是降低程序的耦合度。比如如果A的构造函数发生了改变，而B的构造中又使用到了A，那么B也需要修改。这只是两个，假如有更多的地方使用到了A，那么修改起来就会很繁琐。因此Dagger2正好能够带给我们便...]]></description><category></category></item><item><title><![CDATA[如何提升ListView的效率]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/81411769</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/81411769</guid><author>Chen_dSir</author><pubDate>Sat, 04 Aug 2018 16:06:47 +0800</pubDate><description><![CDATA[ListView的优化方案

 首先，默认直接使用ListView的效率是非常低的，在Adapter的getView()方法中，每次都将布局加载了一遍，当它快速滚动的时候就会性能下降。

  1，在getView()的参数中还有一个View 类型的convertView参数，它用于将之前加载好的布局进行缓存，以便之后的重用。我们可以先判断converView是否为空，如果为空，则使用LayoutI...]]></description><category></category></item><item><title><![CDATA[Android-Universal-Image-Loader框架的基本使用]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/81349466</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/81349466</guid><author>Chen_dSir</author><pubDate>Wed, 01 Aug 2018 22:51:08 +0800</pubDate><description><![CDATA[首先在官网下载:  https://github.com/nostra13/Android-Universal-Image-Loader  下载它的jar文件　

然后打开我们的Android Studio新建一个工程Imagetest. 将当前的工程结构android切换到project,在app目录下面会有一个libs目录，然后将我们下载好的jar文件复制到libs里面。然后鼠标右键点击这个复...]]></description><category></category></item><item><title><![CDATA[Service中是否可以执行耗时操作]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/81293187</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/81293187</guid><author>Chen_dSir</author><pubDate>Mon, 30 Jul 2018 22:11:04 +0800</pubDate><description><![CDATA[不可以。

 

Service和activity是运行在当前app所在的main thread（UI主线程）中的，而耗时操作（如：网络请求、拷贝数据、大文件）会阻塞主线程，给用户不好的体验。


Broadcase耗时操作为10秒，Activity耗时操作为5秒
Service耗时操作为20秒


如果需要在服务中进行耗时操作，可以选择IntentService，  IntentService是...]]></description><category></category></item><item><title><![CDATA[OkHttp的基本使用]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/81132129</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/81132129</guid><author>Chen_dSir</author><pubDate>Fri, 20 Jul 2018 15:03:07 +0800</pubDate><description><![CDATA[　　在使用Okhttp之前需要先添加依赖　，它的具体用法是先创建一个OkhttpClient的实例

　　OkhttpClient client = new OkHttpClient();

      在发送Request请求之前，先创建一个Request的对象。

　　　Request request = new Request.Builder().url(&quot;http://www.baidu....]]></description><category></category></item><item><title><![CDATA[HttpURLConnection的简单用法]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/81128610</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/81128610</guid><author>Chen_dSir</author><pubDate>Fri, 20 Jul 2018 11:27:48 +0800</pubDate><description><![CDATA[　使用HttpURLConnection来访问网络，首先需要获取它的实例，它需要new 一个URL对象，例如URL url = new URL(&quot;http://www.baidu.com&quot;) ,再使用HttpURLConnection connection = (HttpURLConnection) url.openConnection();这个方法返回一个HttpURLConnection实例。...]]></description><category></category></item><item><title><![CDATA[Android中更新UI的两种方法]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/81127261</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/81127261</guid><author>Chen_dSir</author><pubDate>Fri, 20 Jul 2018 10:10:57 +0800</pubDate><description><![CDATA[在Android开发过程中，常需要更新界面的UI。而更新UI是要主线程来更新的，即UI线程更新。如果在主线线程之外的线程中直接更新页面 显示常会报错。抛出异常：android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch i...]]></description><category></category></item><item><title><![CDATA[Java中字节流和字符流的区别]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/81126965</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/81126965</guid><author>Chen_dSir</author><pubDate>Fri, 20 Jul 2018 09:59:07 +0800</pubDate><description><![CDATA[字节流与和字符流的使用非常相似，两者除了操作代码上的不同之外，是否还有其他的不同呢？
实际上字节流在操作时本身不会用到缓冲区（内存），是文件本身直接操作的，而字符流在操作时使用了缓冲区，通过缓冲区再操作文件，如图12-6所示。
下面以两个写文件的操作为主进行比较，但是在操作时字节流和字符流的操作完成之后都不关闭输出流。
范例：使用字节流不关闭执行

Java代码  

package org.lx...]]></description><category></category></item><item><title><![CDATA[SQLite数据库存储]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/81118015</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/81118015</guid><author>Chen_dSir</author><pubDate>Thu, 19 Jul 2018 16:46:54 +0800</pubDate><description><![CDATA[      在Android中为了很方便的管理我们的数据库，提供了一个SQLiteOpenHelper的帮助类。首先这个类是一个抽象类，如果想要使用它必须创建一个类去继承它，然后去实现它的抽象方法。其中有两个重要的方法: getReadableDatabase()和getWritableDatabase().这两个方法都可以创建或者打开一个现有的数据库，并且返回一个可对数据库进行读写的对象。然而，...]]></description><category></category></item><item><title><![CDATA[ContentProvider数据库共享之——MIME类型与getType()]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/81111716</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/81111716</guid><author>Chen_dSir</author><pubDate>Thu, 19 Jul 2018 11:01:51 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/harvic880925/article/details/44620851  谢谢！   

一、概述

在上篇中，我们讲了通过共享数据库的增、删、改、查问题，但在生成PeopleContentProvider类时，由于其派生自ContentProvider，所以我们我们重写了数据库操作的insert()、query()、update()、delet...]]></description><category></category></item><item><title><![CDATA[继续更新]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/81110178</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/81110178</guid><author>Chen_dSir</author><pubDate>Thu, 19 Jul 2018 10:00:01 +0800</pubDate><description><![CDATA[重新开始更新了，之前买了一个服务器，搭建了一个网站然后所有的更新都在那里更新，由于一阵时间在忙考试，忘记续费了，所以也没有备份，现在开始重新在这里更新了，...]]></description><category></category></item><item><title><![CDATA[Kruskal算法求最小生成树-算法设计与分析实验3]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/78892956</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/78892956</guid><author>Chen_dSir</author><pubDate>Mon, 25 Dec 2017 15:03:40 +0800</pubDate><description><![CDATA[题目： 求如图所示，用kruskal算法求下面图的最小生成树：





话不多说，程序如下：
#include
#include
#define N 7
using namespace std;
typedef struct _node{
    int val;
    int start;
    int end;
}Node;
Node V[N];
int cmp(const]]></description><category></category></item><item><title><![CDATA[分治法求和C语言-算法设计实验2]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/78833616</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/78833616</guid><author>Chen_dSir</author><pubDate>Mon, 18 Dec 2017 15:29:58 +0800</pubDate><description><![CDATA[题目：用分治法求和 
这里我们举出一个例子，利用分治法求数组的和： 
比如: a[10] = {1,2,3,4,5,6,7,8,9,10} ,分治法的算法之前我们学数据结构的时候，有过应用，数据结构学过的归并排序，二分法，快速排序算法等里面用到的就是分治法的思想： 
如图： 



把一个大问题，分解成若干个小问题，这里把一个大的数组分解成若干个小数组，再合并把值返回。 
下面看程]]></description><category></category></item><item><title><![CDATA[分治法求和-算法设计实验2]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/78833408</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/78833408</guid><author>Chen_dSir</author><pubDate>Mon, 18 Dec 2017 15:17:01 +0800</pubDate><description><![CDATA[题目：用分治法求和 
这里我们举出一个例子，利用分治法求数组的和： 
比如: a[10] = {1,2,3,4,5,6,7,8,9,10}  ,分治法的算法之前我们学数据结构的时候，有过应用，数据结构学过的归并排序，二分法，快速排序算法等里面用到的就是分治法的思想： 
如图： 
把一个大问题，分解成若干个小问题，这里把一个大的数组分解成若干个小数组，再合并把值返回。 
下面看程序代码:#includ]]></description><category></category></item><item><title><![CDATA[n阶Hanoi塔问题 - 算法设计与分析实验1]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/78771122</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/78771122</guid><author>Chen_dSir</author><pubDate>Mon, 11 Dec 2017 11:41:46 +0800</pubDate><description><![CDATA[由于实验指导书上没有给出具体的问题描述，这里把ACM的算法描述列了出来:问题: 假设有三个分别命名为X、Y和Z的塔座，在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,…,n的圆盘。现要求将X轴上的n个圆盘移至塔座Z上并仍按同样顺序叠排，圆盘移动时必须遵循下列规则： 
1）每次只能移动一个圆盘； 
2）圆盘可以插在X、Y和Z中的任一塔座上； 
3）任何时刻都不能将一个较大的圆盘压在较小的圆盘]]></description><category></category></item><item><title><![CDATA[算法与设计实验1:N阶Hanoi塔问题]]></title><link>https://blog.youkuaiyun.com/Chen_dSir/article/details/78770906</link><guid>https://blog.youkuaiyun.com/Chen_dSir/article/details/78770906</guid><author>Chen_dSir</author><pubDate>Mon, 11 Dec 2017 11:32:04 +0800</pubDate><description><![CDATA[由于实验指导书上没有给出具体的问题描述，这里把ACM的算法描述列了出来:




问题: 假设有三个分别命名为X、Y和Z的塔座，在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,...,n的圆盘。现要求将X轴上的n个圆盘移至塔座Z上并仍按同样顺序叠排，圆盘移动时必须遵循下列规则：

1）每次只能移动一个圆盘；

2）圆盘可以插在X、Y和Z中的任一塔座上；

3）任何时]]></description><category></category></item></channel></rss>