Android 开发中的一些知识点(持续更新)

1.过度绘制

绘制颜色的标识,从好到差:蓝色(1x次绘制) –> 浅绿色(2x绘制) –> 淡红色(3x绘制) –> 红色(4x绘制)。

2.glide 获取缓存图片并存储

new Thread(new Runnable() {

@Override
public void run() {
    try {
        File file = Glide.with(XxqApplication.mContext)
                .load(avatar)
                .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
                .get();
        Log.d(TAG, "run: ");
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
}}).start();
private class SaveImageTask extends AsyncTask<String, Void, File> {
private final Context context;
public SaveImageTask(Context context) {
    this.context = context;
}

@Override
protected File doInBackground(String... params) {
    String imgUrl =  params[0];
    try {
        return
    } catch (Exception ex) {
        return null;
    }
}

@Override
protected void onPostExecute(File result) {
    if (result == null) {
        return;
    }
    //此path就是对应文件的缓存路径
    String path = result.getPath();
    //将缓存文件copy, 命名为图片格式文件
    copyFile(path, newPath);
}}
/*** oldPath: 图片缓存的路径
* newPath: 图片缓存copy的路径
*/
public static void copyFile(String oldPath, String newPath) {
try {
    int byteRead;
    File oldFile = new File(oldPath);
    if (oldFile.exists()) {
        InputStream inStream = new FileInputStream(oldPath);
        FileOutputStream fs = new FileOutputStream(newPath);
        byte[] buffer = new byte[1024];
        while ( (byteRead = inStream.read(buffer)) != -1) {
            fs.write(buffer, 0, byteRead);
        }
        inStream.close();
    }
}
catch (Exception e) {
    System.out.println("复制文件操作出错");
    e.printStackTrace();
}}

3.华为荣耀6plus不能打印日志的问题

拨号界面:##2846579##

工程菜单->后台设置->Log设置->选择第一个AP日志

ok了,重启应用就可以了,不需要重启手机。

4.TextView的旋转问题

我之前开发遇到一个问题,teamLeader让把一个页面的的展示变成斜着的,我之前知道有这种功能但是不知道怎么实现,后来到网上找了一些,然后看了一下,都是要重写TextView的方法才能实现,后来发现textView有一个属性就是可以做旋转的,当当当,rotation闪亮登场了,没错他就是旋转,只要在xml中设置就可以了。

5.命令安装App

进去apk所在目录下,shift+鼠标右键–>选择“在此处打开命令窗口”,输入:“adb install -r ”把文件拖入,完成。
可能出现的问题,adb不是命令,在环境变量自己的用户变量中配置环境变量:配置为sdk下的\platform-tools

F:\ProgramFiles\Android\AndroidStudio_SDK\AndroidStudio_green\platform-tools

6.androidStudio遇到more than one library with package name‘com.xxx.xx’

错误原因是‘com.xxx.xx’被多引用了,引用超过一次。
我遇到的情况是,app中引用了相同的arr包报错,找了好久才知道。

7.直接打开微信的扫一扫

今天看到了一个博客,发现一个可以打开微信二维码的纪录,想看原文在这里
代码如下

 public static void toWeChatScanDirect(Context context) {
    try {
        Intent intent = new Intent();
        intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.LauncherUI"));
        intent.putExtra("LauncherUI.From.Scaner.Shortcut", true);
        intent.setFlags(335544320);
        intent.setAction("android.intent.action.VIEW");
        context.startActivity(intent);
    } catch (Exception e) {
    }
}

8.判断app的SHA1的值是否正确,一般用作高德或百度地图的判断

直接上代码

/**
 * 获取应用的 SHA1 值, 可据此判断高德,百度地图 key 是否正确
 *
 * @param context 上下文
 * @return 应用的 SHA1 字符串, 比如: 53:FD:54:DC:19:0F:11:AC:B5:22:9E:F1:1A:68:88:1B:8B:E8:54:42
 */
public static String getSHA1(Context context) {
    try {
        PackageInfo info = context.getPackageManager().getPackageInfo(
                context.getPackageName(), PackageManager.GET_SIGNATURES);
        byte[] cert = info.signatures[0].toByteArray();
        MessageDigest md = MessageDigest.getInstance("SHA1");
        byte[] publicKey = md.digest(cert);
        StringBuilder hexString = new StringBuilder();
        for (byte aPublicKey : publicKey) {
            String appendString = Integer.toHexString(0xFF & aPublicKey).toUpperCase();
            if (appendString.length() == 1)
                hexString.append("0");
            hexString.append(appendString);
            hexString.append(":");
        }
        String result = hexString.toString();
        return result.substring(0, result.length() - 1);
    } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}
坚持原创技术分享,您的支持将鼓励我继续创作!