<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AndroidGuy的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/AndroidGuy</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; AndroidGuy]]></copyright><item><title><![CDATA[最简洁无bug版本圆角webview实现]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/126977875</link><guid>https://blog.csdn.net/AndroidGuy/article/details/126977875</guid><author>AndroidGuy</author><pubDate>Wed, 21 Sep 2022 18:06:31 +0800</pubDate><description><![CDATA[webview实现圆角]]></description><category></category></item><item><title><![CDATA[隐藏重要字符串的一部分让其显示****的小方法]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/108003160</link><guid>https://blog.csdn.net/AndroidGuy/article/details/108003160</guid><author>AndroidGuy</author><pubDate>Fri, 14 Aug 2020 14:06:23 +0800</pubDate><description><![CDATA[项目中打LOG, 因为有涉及到token的打印, 涉及安全, 不让全部显示, 写了两个简单小方法, 好用! 记录下

1. 对普通字符串mask, 让中间14位显示*****

public static String maskStr(String s) {     

    if (!TextUtils.isEmpty(s) &amp;&amp; s.length() &gt; 14) {

      char[] a = s.toCharArray();

 ...]]></description><category></category></item><item><title><![CDATA[遍历删除文件夹方法]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/107813390</link><guid>https://blog.csdn.net/AndroidGuy/article/details/107813390</guid><author>AndroidGuy</author><pubDate>Wed, 05 Aug 2020 13:43:44 +0800</pubDate><description><![CDATA[private void removeDirectoryRecursive(File parent) {
    if (parent.isDirectory()) {
      String[] files = parent.list();
      for (String filename : files) {
        File child = new File(parent, filename);
        r...]]></description><category></category></item><item><title><![CDATA[关于Gson解析容易出错的几点]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/107443775</link><guid>https://blog.csdn.net/AndroidGuy/article/details/107443775</guid><author>AndroidGuy</author><pubDate>Sun, 19 Jul 2020 12:58:43 +0800</pubDate><description><![CDATA[1. 当json有某个字段, 解析实体类无此字段时, 正常解析

2. 当json没有某个字段, 解析实体类有些字段时, 正常解析, 但是实体类get出来的这个值是null

3.当确定json中某个字段类型时, 如float, 建议实体类也定义成float, 而不要定义成string, 如果是定义成string, 刚应该加上默认值, 如"", 防止后台给过来的数据有调整, 没有这个字段, 就容易出现NullPointerException了, Float有默认值0, 所以不会出错, 而且减少了在代码中再去]]></description><category></category></item><item><title><![CDATA[android国际化时关于单复数及时间的处理]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/105064713</link><guid>https://blog.csdn.net/AndroidGuy/article/details/105064713</guid><author>AndroidGuy</author><pubDate>Tue, 24 Mar 2020 09:49:51 +0800</pubDate><description><![CDATA[1. 关于单复数:

getQuantityString()

2. 关于时间的处理, SimpleDateFormat支持的时间格式:
* G: 公元 时代，例如AD公元
* yy: 年的后2位
* yyyy: 完整年
* MM: 月，显示为1-12
* MMM: 月，显示为英文月份简写,如 Jan
* MMMM: 月，显示为英文月份全称，如 January
* dd: 日，2位数表示，如02
...]]></description><category></category></item><item><title><![CDATA[关于android事件分发, 总结成一个经典例子!]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/104750402</link><guid>https://blog.csdn.net/AndroidGuy/article/details/104750402</guid><author>AndroidGuy</author><pubDate>Mon, 09 Mar 2020 13:10:26 +0800</pubDate><description><![CDATA[关于android事件分发的总结, 就一句话:

假如你是一个公司的员工，你的上头有一个主管，主管上头还有一个经理。为了简单，你们这个团队就有这三个人。那么如果上头安排一件事下来要处理，流程是怎样的呢？显然应该是由你的经理将这件事安排给你的主管来处理，你的主管再将这件事安排给你来处理。等你把这件事办好了，你就应该给你的主管报告，再由你的主管来向你的经理报告。显然，你的主管和经理也有处理这件事的权限...]]></description><category></category></item><item><title><![CDATA[关于Binder中clearCallingIdentity()与restoreCallingIdentity()的作用及如何实现权限认证]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/90750688</link><guid>https://blog.csdn.net/AndroidGuy/article/details/90750688</guid><author>AndroidGuy</author><pubDate>Mon, 03 Jun 2019 13:39:17 +0800</pubDate><description><![CDATA[链接：https://www.zhihu.com/question/41003297/answer/89328987， 这文章写的很详细， mark下

一、源码分析

（1）clearCallingIdentity方法，最终调用如下：


int64_t IPCThreadState::clearCallingIdentity()
{
    int64_t token = ((int64_t)...]]></description><category></category></item><item><title><![CDATA[关于EventBus的onEvent()、onEventMainThread()、onEventBackgroundThread()、onEventAsync()的解释]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/90711666</link><guid>https://blog.csdn.net/AndroidGuy/article/details/90711666</guid><author>AndroidGuy</author><pubDate>Fri, 31 May 2019 10:34:43 +0800</pubDate><description><![CDATA[几句话概括：

1.onEvent()

 使用onEvent来接收事件，那么接收事件和post事件在同一个线程中执行

2.onEventMainThread()

 使用onEventMainThread来接收事件，那么不论post事件在哪个线程运行，接收事件永远在UI线程执行
3.onEventBackgroundThread()

 使用onEventBackground...]]></description><category></category></item><item><title><![CDATA[RecyclerView流畅度优化点]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/90667503</link><guid>https://blog.csdn.net/AndroidGuy/article/details/90667503</guid><author>AndroidGuy</author><pubDate>Wed, 29 May 2019 11:12:27 +0800</pubDate><description><![CDATA[实现：使用onScrollStateChanged回调检测滚动状态，并在RecyclerViewAdapter内部设置类似isScrolling的状态值来控制网络图片的加载。

上代码：


// BaseAdapter中添加如下代码
public abstract class BaseRecyclerViewAdapter&lt;T&gt; extends RecyclerView.Adapt...]]></description><category></category></item><item><title><![CDATA[关于synchronized 关键字]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/90607327</link><guid>https://blog.csdn.net/AndroidGuy/article/details/90607327</guid><author>AndroidGuy</author><pubDate>Mon, 27 May 2019 17:25:21 +0800</pubDate><description><![CDATA[synchronized是Java中的关键字，是一种同步锁。它修饰的对象有以下几种：


1. 修饰一个代码块，被修饰的代码块称为同步语句块，其作用的范围是大括号{}括起来的代码，作用的对象是调用这个代码块的对象；


2. 修饰一个方法，被修饰的方法称为同步方法，其作用的范围是整个方法，作用的对象是调用这个方法的对象；



3. 修改一个静态的方法，其作用的范围是整个静态方法，作用的对...]]></description><category></category></item><item><title><![CDATA[关于Adapter的The content of the adapter has changed问题分析 (转载)]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/89042552</link><guid>https://blog.csdn.net/AndroidGuy/article/details/89042552</guid><author>AndroidGuy</author><pubDate>Fri, 05 Apr 2019 13:23:51 +0800</pubDate><description><![CDATA[写得很详细, 转载下:https://www.cnblogs.com/monodin/p/3874147.html

1、问题描述




 1 07-28 17:22:02.162: E/AndroidRuntime(16779): java.lang.IllegalStateException: The content of the adapter has changed but ListVi...]]></description><category></category></item><item><title><![CDATA[Android事件分发总结]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/88818286</link><guid>https://blog.csdn.net/AndroidGuy/article/details/88818286</guid><author>AndroidGuy</author><pubDate>Tue, 26 Mar 2019 13:44:17 +0800</pubDate><description><![CDATA[1.dispatchTouchEvent是处理触摸事件分发,Android中所有的事件都必须经过这个方法的分发，然后决定是自身消费当前事件还是继续往下分发给子控件处理。返回true表示不继续分发，事件没有被消费。返回false则继续往下分发，如果是ViewGroup则分发给onInterceptTouchEvent进行判断是否拦截该事件，事件(多数情况)是从Activity的dispatchTo...]]></description><category></category></item><item><title><![CDATA[打印正在运行的service及runningtask]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/85321819</link><guid>https://blog.csdn.net/AndroidGuy/article/details/85321819</guid><author>AndroidGuy</author><pubDate>Fri, 28 Dec 2018 14:41:39 +0800</pubDate><description><![CDATA[Mark下, 尤其是service这个:    

public void printRunningService(Context context) {

        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

        List&amp;lt;Runnin...]]></description><category></category></item><item><title><![CDATA[Android 5.1版本以上WebView内存泄漏问题及快速解决方法]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/76026498</link><guid>https://blog.csdn.net/AndroidGuy/article/details/76026498</guid><author>AndroidGuy</author><pubDate>Mon, 24 Jul 2017 16:44:19 +0800</pubDate><description><![CDATA[转载自：http://www.jb51.net/article/113315.htm




问题背景

今天在排查项目内存泄漏过程中发现了一些由WebView引起的内存泄漏，经过测试发现该部分泄漏只会出现在android 5.1及以上的机型。虽然项目使用WebView的场景并不多，但秉承着一个泄漏都不放过的精神，我们肯定要把它给解决了。

遇到的问题

项目中使用WebVi]]></description><category></category></item><item><title><![CDATA[关于android内存泄漏的两篇好文章]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/72956623</link><guid>https://blog.csdn.net/AndroidGuy/article/details/72956623</guid><author>AndroidGuy</author><pubDate>Fri, 09 Jun 2017 13:29:53 +0800</pubDate><description><![CDATA[纯mark


http://droidyue.com/blog/2015/04/12/avoid-memory-leaks-on-context-in-android/


https://drakeet.me/android-leaks/]]></description><category></category></item><item><title><![CDATA[Android AndroidManifest.xml相关flag详细说明]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/70225535</link><guid>https://blog.csdn.net/AndroidGuy/article/details/70225535</guid><author>AndroidGuy</author><pubDate>Tue, 18 Apr 2017 10:49:12 +0800</pubDate><description><![CDATA[android:stateNotNeeded:  默认为false，若设为true，则当Activity重新启动时不会调用onSaveInstanceState（）方法，同样，onCreate（）方法中的Bundle参数将会用null值传进去，也就是说，Activity每次启动都跟第一次启动一样。这样，在某种特殊场合下，由于用户按了Home键，该属性设置为true时，可以保证不用保存原先的状态引用]]></description><category></category></item><item><title><![CDATA[关于开机启动应用的两种好方式]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/69945253</link><guid>https://blog.csdn.net/AndroidGuy/article/details/69945253</guid><author>AndroidGuy</author><pubDate>Mon, 10 Apr 2017 12:20:14 +0800</pubDate><description><![CDATA[针对于系统应用


一种是监听开机广播， boot complete


另一种是设置app manifest 属性persistent="true", 这样能达到开机启动并常驻的目的


mark下]]></description><category></category></item><item><title><![CDATA[线程同步总结--synchronized方法和synchronized代码块]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/54944718</link><guid>https://blog.csdn.net/AndroidGuy/article/details/54944718</guid><author>AndroidGuy</author><pubDate>Thu, 09 Feb 2017 10:45:14 +0800</pubDate><description><![CDATA[转载自：http://991690137.iteye.com/blog/1948882  




阅读前必须明白：

程序代码的目的是操作数据，而在操作数据时有可能发生同时操作同一个数据，所以为了避免同时操作一个数据产生错误才出现线程同步的概念，即synchronized方法和synchronized代码块技术。

这里的同一个数据包括 所有对象...

还有每一个对象都有]]></description><category></category></item><item><title><![CDATA[Android中常见的内存泄漏]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/54138100</link><guid>https://blog.csdn.net/AndroidGuy/article/details/54138100</guid><author>AndroidGuy</author><pubDate>Fri, 06 Jan 2017 14:56:06 +0800</pubDate><description><![CDATA[转载自：【huachao1001的专栏：http://blog.csdn.net/huachao1001】


我们经常会在不经意间写出造成内存泄漏的代码，往往在代码上很难查出来。但是我们可以通过一些辅助工具来检测是否存在内存泄漏，比如通过AndroidStudio的monitors来查看内存的变化情况，或者是通过开源框架《LeakCanary》来检测。本文主要是从网络中搜索汇总一些常见的内]]></description><category></category></item><item><title><![CDATA[SweepGradient参数的意义]]></title><link>https://blog.csdn.net/AndroidGuy/article/details/53836692</link><guid>https://blog.csdn.net/AndroidGuy/article/details/53836692</guid><author>AndroidGuy</author><pubDate>Fri, 23 Dec 2016 10:51:33 +0800</pubDate><description><![CDATA[转载自：https://my.oschina.net/u/2555140/blog/631847


之前有一个项目需要这样的一个控件：




自然想到用SweepGradient来渲染这个半环，参考了下官方的ColorPickerDemo，发现其中是一个完整的圆环，并不需要指定SweepGradient 的第四个参数positions.
于是查阅了API和stackoverf]]></description><category></category></item></channel></rss>