<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Qw的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qiwei352</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qiwei352]]></copyright><item><title><![CDATA[google firebase service account json]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/159416899</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/159416899</guid><author>qiwei352</author><pubDate>Tue, 24 Mar 2026 10:19:49 +0800</pubDate><description><![CDATA[3、点击生成新的密钥，拿到类似xxxx-firebase-adminsdk-xxxxxx.json的文件给后台。1、firebase控制首页找到项目，或者新建项目。2、进入项目点击设置找到服务账号。]]></description><category></category></item><item><title><![CDATA[DialogFragment 传递Arguments的值设置到EditText的问题]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/119423433</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/119423433</guid><author>qiwei352</author><pubDate>Thu, 05 Aug 2021 17:37:55 +0800</pubDate><description><![CDATA[先看下源码
/**
     * Controls whether the saving of this view's state is
     * enabled (that is, whether its {@link #onSaveInstanceState} method
     * will be called).  Note that even if freezing is enabled, the
     * view still must have an id assigned to ]]></description><category></category></item><item><title><![CDATA[WeakHandler]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/114439071</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/114439071</guid><author>qiwei352</author><pubDate>Sat, 06 Mar 2021 13:53:16 +0800</pubDate><description><![CDATA[public class WeakHandler {
    private final Handler.Callback mCallback; // hard reference to Callback. We need to keep callback in memory
    private final ExecHandler mExec;
    private final Lock mLock = new ReentrantLock();
    @VisibleForTesting
    p]]></description><category></category></item><item><title><![CDATA[【Android】kotlin解决AndroidX使用Glide生成GlideApp的问题]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/112905340</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/112905340</guid><author>qiwei352</author><pubDate>Wed, 20 Jan 2021 17:47:07 +0800</pubDate><description><![CDATA[第一步
implementation 'com.github.bumptech.glide:glide:4.9.0'
kapt 'com.github.bumptech.glide:compiler:4.9.0' // 使用kapt而不是

第二步
apply plugin: 'kotlin-kapt'  //在build.gradle中添加插件

第三部
@GlideModule
class CustomAppGlideModule : AppGlideModule() {

    /**
     *]]></description><category></category></item><item><title><![CDATA[build.gradle阿里云镜像]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/103026557</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/103026557</guid><author>qiwei352</author><pubDate>Tue, 12 Nov 2019 12:31:10 +0800</pubDate><description><![CDATA[maven { url ‘http://maven.aliyun.com/nexus/content/groups/public/’ }
maven { url ‘https://maven.aliyun.com/repository/google’ }
maven{ url ‘https://maven.aliyun.com/repository/jcenter’}

]]></description><category></category></item><item><title><![CDATA[异步笔记]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/100161199</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/100161199</guid><author>qiwei352</author><pubDate>Fri, 30 Aug 2019 16:18:59 +0800</pubDate><description><![CDATA[常用的：
Thread
new Thread(){
@Override
public void run() {
super.run();
// NetWork or DataBase Operation
}
}.start();
//设置进程级别
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
缺点：
创建及销毁线程消耗...]]></description><category></category></item><item><title><![CDATA[ThreadManager 一个简易的线程池管理类，提供三个线程池]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/96889777</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/96889777</guid><author>qiwei352</author><pubDate>Fri, 26 Jul 2019 15:03:00 +0800</pubDate><description><![CDATA[package com.example.qiwei.tinker;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent....]]></description><category></category></item><item><title><![CDATA[图片缓存流程]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/96153656</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/96153656</guid><author>qiwei352</author><pubDate>Thu, 18 Jul 2019 10:57:14 +0800</pubDate><description><![CDATA[三级缓存：
1.内存缓存
2.本地缓存
3.网络缓存
作用：减少不必要的流量消耗，加载慢，影响用户体验，oom导致的频繁GC
1.首次加载的时候通过网络加载，获取图片，保存到内存和本地
2.之后运行App时，优先访问内存中的图片缓存
3.如果内存没有，则加载本地的图片

主流图片缓存框架优缺点对比
ImageLoader的优点：
1、支持本地缓存文件名规则定义
2、默认实现多种内存缓存算法
3、避...]]></description><category></category></item><item><title><![CDATA[性能优化 App启动优化]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/96153031</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/96153031</guid><author>qiwei352</author><pubDate>Tue, 16 Jul 2019 17:01:22 +0800</pubDate><description><![CDATA[代码可优化区域：
1.Application onCreate  （使用线程的方式初始化，懒加载）
2.应用程序的第一界面Activity onCreate
3.xml布局
4.利用提前展示出来的Window，快速展示出来一个界面，给用户快速反馈的体验；
5.避免在启动时做密集沉重的初始化（Heavy app initialization）；
6.定位问题：避免I/O操作、反序列化、网络操作、布局...]]></description><category></category></item><item><title><![CDATA[替换字符串[]为空字符串]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/86518540</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/86518540</guid><author>qiwei352</author><pubDate>Thu, 17 Jan 2019 09:50:44 +0800</pubDate><description><![CDATA[replaceAll(&quot;\\[\\]&quot;,&quot;\&quot;\&quot;&quot;)


]]></description><category></category></item><item><title><![CDATA[通过rxjava保存一整块view到手机相册]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/82995600</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/82995600</guid><author>qiwei352</author><pubDate>Wed, 10 Oct 2018 13:21:58 +0800</pubDate><description><![CDATA[保存一整块view的代码
//执行操作
btn_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ViewUtil.createDialog(getActivity(), QMU...]]></description><category></category></item><item><title><![CDATA[Android 7.0 打开系统相机适配及使用FileProvider]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/82770891</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/82770891</guid><author>qiwei352</author><pubDate>Wed, 19 Sep 2018 13:41:03 +0800</pubDate><description><![CDATA[针对部分高版本机型打开系统相机的适配代码
/**
 * 类名称：PhotographForSignActivity
 * 类功能：打开系统相机拍照
 * 类作者：Qw
 * 类日期：
 **/
public class PhotographForSignActivity extends Activity {
    private static final int PHOTO = 9; // 拍照...]]></description><category></category></item><item><title><![CDATA[Android  gradle 依赖库下载的地址]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/82689080</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/82689080</guid><author>qiwei352</author><pubDate>Thu, 13 Sep 2018 15:37:49 +0800</pubDate><description><![CDATA[Mac系统默认下载到：/Users/(用户名)/.gradle/caches/modules-2/files-2.1 
Windows系统默认下载到：C:\Users(用户名).gradle\caches\modules-2\files-2.1]]></description><category></category></item><item><title><![CDATA[Android列表适配器封装]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/82688211</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/82688211</guid><author>qiwei352</author><pubDate>Thu, 13 Sep 2018 14:59:50 +0800</pubDate><description><![CDATA[一个简单的列表数据适配器封装，可放入基本使用类型数据，实体类数据

/**
 * 类名称：**
 * 类功能：***
 * 类作者：Qw
 * 类日期：****
 **/
public abstract class MyBaseAdapter&amp;amp;lt;T&amp;amp;gt; extends BaseAdapter {
    public String TAG = this.getClass().getSimp...]]></description><category></category></item><item><title><![CDATA[Android  重启应用代码]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/82223462</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/82223462</guid><author>qiwei352</author><pubDate>Thu, 30 Aug 2018 16:19:46 +0800</pubDate><description><![CDATA[//重启应用
                final Intent launchIntent = getApplication().getPackageManager().getLaunchIntentForPackage(getPackageName());
                if (launchIntent != null) {
                    UIU...]]></description><category></category></item><item><title><![CDATA[A WebView method was called on thread 'JavaBridge'. All WebView methods must be called]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/81506851</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/81506851</guid><author>qiwei352</author><pubDate>Wed, 08 Aug 2018 13:45:23 +0800</pubDate><description><![CDATA[android与webview js交互问题



@JavascriptInterface
        public void goToUrl(String url){
             now.loadUrl(&quot;file:///android_asset/loadingfailed.html&quot;);
        }

js交互调用上方法时出现如下错误

java.lang.Thr...]]></description><category></category></item><item><title><![CDATA[android 6.0 permission exception Can only use lower 8 bits for requestCode]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/78923881</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/78923881</guid><author>qiwei352</author><pubDate>Thu, 28 Dec 2017 16:42:55 +0800</pubDate><description><![CDATA[申请权限遇到的错误  java.lang.RuntimeException: Unable to resume activity {com.y.account.RegisterActivity}: java.lang.IllegalArgumentException: Can only use lower 8 bits for requestCode]]></description><category></category></item><item><title><![CDATA[SharedPreferences在多进程中的使用的问题]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/74502522</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/74502522</guid><author>qiwei352</author><pubDate>Mon, 24 Jul 2017 15:26:41 +0800</pubDate><description><![CDATA[SharedPreferences

SharedPreferences
public interface SharedPreferences 

android.content.SharedPreferences

Interface for accessing and modifying preference data returned by getSharedPreferences(Stri]]></description><category></category></item><item><title><![CDATA[android开发之android:process属性]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/74502300</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/74502300</guid><author>qiwei352</author><pubDate>Wed, 05 Jul 2017 20:30:21 +0800</pubDate><description><![CDATA[android:process 的坑官方说明：默认情况下，同一应用的所有组件均在相同的进程中运行，且大多数应用都不会改变这一点。 但是，如果您发现需要控制某个组件所属的进程，则可在清单文件中执行此操作。 
各类组件元素的清单文件条目—、、 和 —均支持 android:process 属性，此属性可以指定该组件应在哪个进程运行。您可以设置此属性，使每个组件均在各自的进程中运行，或者使一些组件共享一个]]></description><category></category></item><item><title><![CDATA[Animation属性练习]]></title><link>https://blog.youkuaiyun.com/qiwei352/article/details/70597627</link><guid>https://blog.youkuaiyun.com/qiwei352/article/details/70597627</guid><author>qiwei352</author><pubDate>Fri, 05 May 2017 16:42:55 +0800</pubDate><description><![CDATA[在Android系统中，官方给我们提供了两种类型的动画：属性动画(Property Animation) 和 视图动画(View Animation)，而视图动画又包含了两种类型：补间动画(Tween animation) 和 帧动画(Frame animation)。


Property Animation(属性动画)：通过改变对象的属性来实现动画效果。
View Animation(视图动画]]></description><category></category></item></channel></rss>