<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[JaydenHo的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Jaden_hool</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Jaden_hool]]></copyright><item><title><![CDATA[ReportFragment cannot be cast to ReportFragment]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/104780163</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/104780163</guid><author>Jaden_hool</author><pubDate>Tue, 10 Mar 2020 18:26:05 +0800</pubDate><description><![CDATA[环境

Replugin插件框架

问题原因
问题原因的分析这段文字没有经过润色，纯粹是初稿，不一定易于阅读，这段看不下去的同学可以直接看文章最后的解决方案。
ReportFragment是android.arch.lifecycle组件中的类，lifecycle组件中的ProcessLifecycleOwnerInitializer继承自ContentProvider，利用ContentProv...]]></description><category></category></item><item><title><![CDATA[解决在现有Android项目中集成Flutter遇到的问题]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/87186108</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/87186108</guid><author>Jaden_hool</author><pubDate>Wed, 13 Feb 2019 15:50:30 +0800</pubDate><description><![CDATA[如何添加Flutter到现有Android项目
Flutter官方有详细的文档, 参考文档即可。
集成过程中遇到的神坑
主Module名称一定要为&amp;quot;app&amp;quot;
如果主Module名称不是&amp;quot;app&amp;quot;, 执行Flutter#createView后，会出现native层的崩溃。并且会出现错误信息VM snapshot must be valid, 崩溃信息如下：
#1 main

SIGABRT

解析原...]]></description><category></category></item><item><title><![CDATA[ConstraintLayout]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/83413480</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/83413480</guid><author>Jaden_hool</author><pubDate>Fri, 26 Oct 2018 13:16:44 +0800</pubDate><description><![CDATA[
官网

添加约束
父布局的约束
如图添加了A控件和其父布局左侧的约束，它们之间的间距可以调整。

互相约束
控件可以两两之间约束，B在A右侧，C在A下方。B和A不必上下对齐，B可以上下移动。

对齐
控件之间可以在相同一侧对齐，对齐后也能再设置偏移。


基准线对齐
控件之间可以互相以文字基准线对齐。

Guideline约束
可以在横竖两个方向创建不可见的引导线，可以用绝对距离或百分比距离定义...]]></description><category></category></item><item><title><![CDATA[Gradle中的常量]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/80757080</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/80757080</guid><author>Jaden_hool</author><pubDate>Thu, 21 Jun 2018 10:48:45 +0800</pubDate><description><![CDATA[定义常量

以Android为例，在根目录下有一个gradle.properties文件，可以在该文件中定义常量：



BUILD_TOOLS_VERSION = 26.0.2 //字符串不要加引号。
COMPILE_SDK_VERSION = 26
TARGET_SDK_VERSION = 23
MIN_SDK_VERSION = 15



使用常量

在.gradle文件中，直接引用常量的...]]></description><category></category></item><item><title><![CDATA[Android 圆角边框RoundRect原理]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/80757072</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/80757072</guid><author>Jaden_hool</author><pubDate>Thu, 21 Jun 2018 10:48:21 +0800</pubDate><description><![CDATA[绘制圆角矩形的方法



 /**
     * Draw the specified round-rect using the specified paint. The roundrect will be filled or
     * framed based on the Style in the paint.
     *
     * @param rect The rectangul...]]></description><category></category></item><item><title><![CDATA[ANR分析]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/80732971</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/80732971</guid><author>Jaden_hool</author><pubDate>Tue, 19 Jun 2018 13:58:36 +0800</pubDate><description><![CDATA[产生ANR的原因


While your activity is in the foreground, your app has not responded to an input event or BroadcastReceiver (such as key press or screen touch events) within 5 seconds.
While you do not hav...]]></description><category></category></item><item><title><![CDATA[Android Dialog宽度match_parent]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/80678416</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/80678416</guid><author>Jaden_hool</author><pubDate>Wed, 13 Jun 2018 14:17:53 +0800</pubDate><description><![CDATA[Dialog满宽的两种方式

首先为Dialog设置Style



 &amp;lt;style name=&quot;MyTheme.Dialog&quot; parent=&quot;@android:style/Theme.Dialog&quot;&amp;gt;
        &amp;lt;item name=&quot;android:windowFrame&quot;&amp;gt;@null&amp;lt;/item&amp;gt;
        &amp;lt;!-- 边框 --&a]]></description><category></category></item><item><title><![CDATA[Git快速克隆大项目]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/79802517</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/79802517</guid><author>Jaden_hool</author><pubDate>Tue, 03 Apr 2018 14:09:26 +0800</pubDate><description><![CDATA[
  有些项目非常庞大，例如android源码，如果只是想获取项目的代码以及之后的更新，而不需要care该项目的历史提交记录，那么可以只克隆某个分支的最后一次提交。




选择克隆单个分支

git clone --branch &amp;lt;branch_name&amp;gt; &amp;lt;remote-address&amp;gt;



只克隆最新的提交记录

git clone &amp;lt;remote-addre...]]></description><category></category></item><item><title><![CDATA[Warning: can't find referenced field/method '...' in library class ...]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/79417529</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/79417529</guid><author>Jaden_hool</author><pubDate>Thu, 01 Mar 2018 21:25:27 +0800</pubDate><description><![CDATA[打release包时，proguard可能会报以下警告导致打包失败： 
  Warning: can’t find referenced field/method ‘…’ in library class … 
  Warning: can’t find referenced field/method ‘…’ in program class …
原因
项目中的代码引用了jar包中的某个方法或变量，]]></description><category></category></item><item><title><![CDATA[MVP-MVVM]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/78974676</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/78974676</guid><author>Jaden_hool</author><pubDate>Thu, 04 Jan 2018 19:51:58 +0800</pubDate><description><![CDATA[MVP





Model

Model提供用户界面需要显示的数据，包括从服务器获取数据、从本地缓存获取数据等数据操作。



View

View层应该尽量的精简，负责显示数据和用户交互。MVP下Activity和Fragment体现在了这一层，Activity一般也就做加载UI视图、设置事件监听再交由Presenter处理的一些工作，所以也就需要持有相应Presenter的引用。



Pr]]></description><category></category></item><item><title><![CDATA[Android Architecture Components]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/78974672</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/78974672</guid><author>Jaden_hool</author><pubDate>Thu, 04 Jan 2018 19:51:15 +0800</pubDate><description><![CDATA[开发者经常面临的问题


  Android应用由四大组件构成，各组件可以被独立且无序的调起，用户会在各个App之间来回切换。组件启动后，生命周期会受用户的操作和系统影响，不完全受开发者控制。而由于设备内存问题，进程随时可能被系统强杀，所以不要将数据和状态直接存储在组件中，也不要让组件互相依赖。




问题实例


内存泄漏：在Activity中发起网络请求，在网络请求返回之前退出Activit]]></description><category></category></item><item><title><![CDATA[设置以渐变、图片为背景的状态栏]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/78924735</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/78924735</guid><author>Jaden_hool</author><pubDate>Thu, 28 Dec 2017 17:43:25 +0800</pubDate><description><![CDATA[如何改变状态栏颜色
  设置app的主题，状态栏的颜色就是colorPrimaryDark的颜色。但是只能设置纯色。
  <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme]]></description><category></category></item><item><title><![CDATA[解决设置状态栏透明后，软键盘弹出遮挡输入框的问题]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/78924713</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/78924713</guid><author>Jaden_hool</author><pubDate>Thu, 28 Dec 2017 17:41:16 +0800</pubDate><description><![CDATA[当主题中用了<item name="android:windowTranslucentStatus">true</item>后，软键盘弹出就不会将输入框往上推了，该类可以解决这个问题.
package com.xunlei.thundervideo.util;import android.app.Activity;
import android.graphics.Rect;
import andro]]></description><category></category></item><item><title><![CDATA[Android搜狗输入法搜索栏]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/78617799</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/78617799</guid><author>Jaden_hool</author><pubDate>Thu, 23 Nov 2017 18:36:29 +0800</pubDate><description><![CDATA[背景：采用搜狗输入法在应用中所有的中文输入框输入内容时，搜狗的联想搜索栏都会出现，而且不会顶起输入框，导致输入框被盖住。
结论
搜狗输入法有一个应用名单，通过包名进行判断。例如UC浏览器、手机迅雷等应用就会开启搜索栏；微信、QQ等应用就不会开启。
根据EditText的impOptions:”actionSearch”属性决定是否对该EditText开启搜索栏。
我们应用中的EditText不管是否]]></description><category></category></item><item><title><![CDATA[内存不足导致应用进程被杀]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/78617685</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/78617685</guid><author>Jaden_hool</author><pubDate>Thu, 23 Nov 2017 18:23:31 +0800</pubDate><description><![CDATA[应用处于后台时，如果手机内存不足，应用进程会被强制杀掉. 如果通过最近打开的应用列表回到应用，那么首先会调起Application, 然后会恢复被杀之前的Activity, 如果Activity中含有Fragment, 那么Fragment也会被创建新的实例，但是应用中的其他单例等数据就会被清除。
生命周期Android的组件都是有生命周期的，与用户交互的Activity和Fragment都有明确的]]></description><category></category></item><item><title><![CDATA[Kotlin的inline内联函数]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/78437947</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/78437947</guid><author>Jaden_hool</author><pubDate>Fri, 03 Nov 2017 17:47:20 +0800</pubDate><description><![CDATA[方法调用流程调用一个方法是一个压栈和出栈的过程，调用方法时将栈针压入方法栈，然后执行方法体，方法结束时将栈针出栈，这个压栈和出栈的过程会耗费资源，这个过程中传递形参也会耗费资源。为什么需要inline有些简单的方法会被频繁调用，什么叫简单的方法呢，举个例子：fun <T> check(lock: Lock, body: () -> T): T {
        lock.lock()]]></description><category></category></item><item><title><![CDATA[获取User-Agent]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/78196678</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/78196678</guid><author>Jaden_hool</author><pubDate>Tue, 10 Oct 2017 19:55:53 +0800</pubDate><description><![CDATA[/**
 * @return 浏览器的userAgent, 某些机型含有中文。
 */
public static String getUserAgent() {
    String userAgent = getWebViewUserAgent();
    if (StringUtil.isEmpty(userAgent)) userAgent = getSystemUserAgent();]]></description><category></category></item><item><title><![CDATA[Android 打印当前进程的所有线程信息]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/73457320</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/73457320</guid><author>Jaden_hool</author><pubDate>Mon, 19 Jun 2017 10:09:39 +0800</pubDate><description><![CDATA[private void printThread() {
        Map<Thread, StackTraceElement[]> stacks = Thread.getAllStackTraces();
        Set<Thread> set = stacks.keySet();
        for (Thread key : set) {
            StackT]]></description><category></category></item><item><title><![CDATA[Git 情景处理]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/73276837</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/73276837</guid><author>Jaden_hool</author><pubDate>Thu, 15 Jun 2017 10:49:49 +0800</pubDate><description><![CDATA[本地代码尚不能提交，但是又必须同步服务器代码执行git stash ：将本地代码保存；
执行git pull origin (rBranch):(lBranch) ：同步服务器代码；
执行git stash apply [(stashName) ] ：将stash中的代码合并到工作区，解决好冲突；
需要将远程分支checkout到本地并且在本地建立对应分支git checkout (–track)]]></description><category></category></item><item><title><![CDATA[Android项目初次构建慢，building gradle project info很久]]></title><link>https://blog.youkuaiyun.com/Jaden_hool/article/details/70655147</link><guid>https://blog.youkuaiyun.com/Jaden_hool/article/details/70655147</guid><author>Jaden_hool</author><pubDate>Mon, 24 Apr 2017 20:03:44 +0800</pubDate><description><![CDATA[初次打开Android项目，Loading时间长，一直卡在Building gradle project info初次打开Android项目，需要根据gradle-wrapper.properties中的配置从gradle服务器下载对应的gradle版本并进行配置，这个过程非常耗时，解决方法如下，以gradle-3.4.1为例：方法一快速但有缺陷
先打开project/gradle/wrapper/]]></description><category></category></item></channel></rss>