android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一个亚于eclipse的地方,哦,你电脑还不能太烂~

1)先来说说android studio 启动应用黑白屏的问题。

前不久升级了studio,更新到了2.1.1,发现了一个问题。在启动新项目的时候,app总会出现一段长时间的白屏或者黑屏,楼主一开始一直以为是楼主接的公司项目算法太耗时的原因,但是楼主在写 小demo的时候竟然也发现了这样的问题,而且这样的情况在网上还相当的频繁,楼主便去网上看了看问题所在,请看,图片来源于网络。

四处查看一番,才知道这是android studio推出的新功能,Instant Run,好吧,对于这个东西,楼主不想去做过多深入的讲解,好吧,被你发现了,是楼主害怕自己讲不好这个东西。

而这个东西呢一直以来被广大朋友诟病,不过楼主仔细一看发现了一点新东西,原来这个在重新启动的时候可以直接重新启动activity,而不是启动整个app,所以这样直接加快了我们的开发效率有木有?

大家可以看,这个运行的左边有一个闪电的箭头,这个就是代表可以使用insant Run启动的。

额,另外对于大家的担心,说一下,这个东西只是google官方在2.0以后为了加快我们的开发效率而做的,实际上你在真正使用app的时候并不会出现这样可能长达7、8秒的黑白屏情况,还望不知道的小伙伴压压惊。

2)再来说下android studio 的mipmap和drawable的选择。

大家都知道,android studio相比eclipse,在资源包res下,多了一个文件夹mipmap,里面的子文件夹竟然和drawable下的一模一样,那平平多搞一个出来做什么呢?

查看官方文档,下面资料来自谷歌官方。

额,我相信各位小伙伴的英文水平不会比楼主还渣吧,楼主简单的看了一下,大概意思是:

drawable包下可以存放png,jpeg,gif图像文件,以及我们开发经常用到的.9图,不过drawable包主要还是为了存放一些自定义的图形和按钮变色等之类的xml。

而mipmap是纯粹的为存放应用icon和一些其他图片而生,这也是官方强烈推荐我们使用mipmap存放图片的,官方说把图片放在mipmaps下面可以提高系统渲染图片的速度,提高图片质量,减少GPU压力。

3)好吧,其实楼主最想说的还是mipmap下几个包的作用以及屏幕适配的部分处理。

首先楼主就在楼主的博客园首页简单截一张图,放在mipmap下的xhdpi文件夹下。

因为楼主的手机就是xhdpi密度的,对于查看自己的手机密度,可以通过两行代码处理。

 public void btnClick(View view) {
float xdpi = getResources().getDisplayMetrics().xdpi;
float ydpi = getResources().getDisplayMetrics().ydpi;
TextView textView = (TextView) findViewById(R.id.text);
textView.setText("宽度:"+xdpi+" 高度:"+ydpi);
}

楼主的xml文件很简单。

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.nanchen.drawablemipmapdemo.MainActivity"> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="获取屏幕宽度"
android:onClick="btnClick"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/text"
android:text="用于显示屏幕宽高"/> <TextView
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#9c9a9a"/> <ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/test"
android:contentDescription="用于展示图片"/>
</LinearLayout>

运行:

点击按钮,可以看到楼主的机型是295*295的,属于xhdpi密度机型,对于比对,大家可以查看下图。

而图片的显示楼主是采用的wrap_content包裹内容,下面我们把图片移动到xxdpi,注意:不是复制,是移动!!!

再次运行:

什么鬼,图片直接变小了,错觉?

再次把图片移动到hdpi包下看看。

运行:

这次又变大了,看来这的确不是错觉呀。

分析一下,我们把一张图片放在比手机密度高的包下的时候,显示出来的东西会变小,而放在密度比手机更低的包下,图片会自动放大。

我是这样理解的,不知道正确与否,手机的密度大小就像一个容器,当手机密度大的时候意味着可以装的东西更大,而一个同样大小的东西看起来相对就会小一些,所以我们看到的显示的图片变小了,而放在密度更小的包下的时候,图片看起来相对会大些。

嘿嘿,投机取巧了。

4)日常开发应该注意的问题。

根据android的开发建议,我们应该在准备图片资源的时候尽量给每种密度都准备一套,这样可以使屏幕的适配性达到最好,这也是因为我们android机型众多的一个基本要求。

UI顺便再把按照缩放比例来为我们准备一套,想想真是美妙极了。

但,实际情况是!!!!

他们只会给你一套图片资源,没错,理想很丰满,现实很骨感,的确如此,那我们再怎么样也得直面惨淡的人生对吧,怎么做呢?

根据我们上面的测试,可以发现当一张图片放在高密度的包下,图片会被缩小,除了看着小点好像还没什么,但是当在低密度的包下,图片的放大必然会引起占用更多的内存。因为图片变大了,占用的像素点也就更多了,而这也必然会导致内存的占用增加。

我相信很多在职开发人员都有遇到,就是当你的项目慢慢变大后,你引用一张hdpi像素的照片时,都极有可能发生OOM,但如果放在高密度的xxhdp或者xxxhdpi的时候,这样的情况就不会发生。

经过上面的分析,也可以得到这样的结论,我们最佳的放置应该在高密度的文件夹下,而目前市面最合适的是xxhdpi。

好了,本节内容先介绍到这里,欢迎指正。

——————————————————————————————————————————————————————————————————

2016年8月18日15时57分更正:

首先感谢好心人士 Fndroid在评论区的解答,根据楼主查看官方资料,的确是有说明图片我们应该尽量的置于drawable文件夹下,而mipmap用于存放图标,android studio之所以会在drawable的基础上添加上mipmap,是为了解决由于项目的增大导致开发人员会把图片和icon混淆,所以增加了mipmap一类专用于存放图标的文件夹。

android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!的更多相关文章

  1. 『BUG』Android Studio 64位 始终提示 JVM 启动不了,JDK配置失败,error code -1

    前几天 安装了 Android Studio 2.2. 本来一切都好,但是当我修改了 配置文件 studio64.exe.vmoptions 想修改 最大内存(保证运行流畅)后,AS 就再也运行不了了 ...

  2. React Native Android启动白屏的一种解决方案上

    我们用RN去开发Android应用的时候,我们会发现一个很明显的问题,这个问题就是启动时每次都会有1~3秒的白屏时间,直到项目加载出来 为什么会出现这个问题? RN开发的应用在启动时,首先会将js b ...

  3. react native 完美解决启动白屏

    先讲下我的RN版本0.58.5 首先安装react-native-splash-screen(目前使用的版本是3.2.0) 项目地址https://github.com/crazycodeboy/re ...

  4. Flutter应用在夜神模拟器启动白屏问题

    Flutter应用在夜神模拟器启动白屏问题 flutter run  出现如下错误 [ERROR:flutter/shell/gpu/gpu_surface_gl.cc(39)] Failed to ...

  5. 解决android 启动白屏问题

    Android 启动APP时黑屏白屏的三个解决方案 http://www.cnblogs.com/liqw/p/4263418.html android:windowSoftInputMode属性使用 ...

  6. React Native Android启动白屏的一种解决方案下

    实现思路 思路大流程: 1.APP启动的时候控制ReactActivity从而显示启动屏. 2.编写原生模块,提供一个关闭启动屏的公共接口. 3.在js的适当位置(一般是程序初始化工作完成后)调用上述 ...

  7. Android开发之解决APP启动白屏或者黑屏闪现的问题

    在做搜芽的过程中,发现那个外包人缘做的不行,由于启动的时候会停顿,然后白屏一会,联想到几个月前我在我的三僚企业通信软件里面拉起9K-Mail的时候也会黑屏,所以决定学习一下.解决一下.这不,万能的网络 ...

  8. 解决android splash 启动白屏问题

    有时我们会发现 ,在splash 页面启动之前会有那么零点几秒的白屏, 真的很让人抓狂 解决办法其实也很简单 . 1.在style.xml中定义一个样式, 这里引入 splash页面的 图片, 注意不 ...

  9. 解决关于 ionic3 启动白屏 控制台错误提示:Uncaught SyntaxError Use of const in strict mode.

    今天将项目从ionic2 升级为ionic3 ,ionic serve 运行在网页上无任何错误. 但是将项目打包成为android apk 却一直卡在启动页面 白屏,进不去的情况.后来在android ...

随机推荐

  1. Vagrant 基础全面解析

    这篇 Vagrant 入门文章将带你创建一个 Vagrant 项目,这个过程将会用到 Vagrant 所提供的主要基本特性.如果想了解 Vagrant 能为你带来哪些好处,可以阅读 Vagrant 官 ...

  2. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  3. sonn_game网站开发01:写在最前面

    之前做的个人博客项目,日向博客现在已经进入后期完善阶段了.是时候开始打造一个新坑了. 然而改造个什么坑呢?构思了好几天,想了好多方案,都觉得没啥动手欲望.因为,我想做的是那种,自己能用得上,而且有一定 ...

  4. Python标准库--typing

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...

  5. 创建几个常用table展示方式插件

    这次和大家分享的是自己写的一个table常用几种展示格式的js插件取名为(table-shenniu),样式使用的是bootstrap.min.css,还需要引用jquery.min.js包,这个插件 ...

  6. npm package.json属性详解

    概述 本文档是自己看官方文档的理解+翻译,内容是package.json配置里边的属性含义.package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象.其中很多属性可以通过np ...

  7. JAVA构造时成员初始化的陷阱

    让我们先来看两个类:Base和Derived类.注意其中的whenAmISet成员变量,和方法preProcess(). 情景1:(子类无构造方法) class Base { Base() { pre ...

  8. PAT甲级 1001. A+B Format (20)

    题目原文: Calculate a + b and output the sum in standard format -- that is, the digits must be separated ...

  9. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  10. BPM Domino集成解决方案

    一.需求分析 Lotus Notes/Domino是IBM的协同办公平台,在国内有广泛的用户. 但由于推出年头较早.采用文档数据库等特点, 导致其流程集成能力弱.统计分析难.不支持移动办公等问题,很多 ...