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

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密度的,对于查看自己的手机密度,可以通过两行代码处理。

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

楼主的xml文件很简单。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     android:orientation="vertical"
 8     tools:context="com.example.nanchen.drawablemipmapdemo.MainActivity">
 9
10     <Button
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content"
13         android:text="获取屏幕宽度"
14         android:onClick="btnClick"/>
15     <TextView
16         android:layout_width="match_parent"
17         android:layout_height="wrap_content"
18         android:id="@+id/text"
19         android:text="用于显示屏幕宽高"/>
20
21     <TextView
22         android:layout_marginTop="10dp"
23         android:layout_marginBottom="10dp"
24         android:layout_width="match_parent"
25         android:layout_height="1dp"
26         android:background="#9c9a9a"/>
27
28     <ImageView
29
30         android:layout_width="wrap_content"
31         android:layout_height="wrap_content"
32         android:src="@mipmap/test"
33         android:contentDescription="用于展示图片"/>
34 </LinearLayout>

运行:

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

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

再次运行:

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

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

运行:

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

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

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

嘿嘿,投机取巧了。

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

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

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

但,实际情况是!!!!

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

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

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

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

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

时间: 2024-10-07 16:09:31

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

14-1 启动白屏问题解决与启动屏开发-1

点击flutter的app.在打开的时候有持续1到3秒的白屏 白屏 白屏后才会显示首页 flutter应用在启动的时候,首先会启动flutter SDK,然后会将flutter的代码加载到内存里面.然后完成渲染.在这个过程中,它是没有内容可以显示的,所以就只能显示这样的一个白屏 添加欢迎页 开源的插件. 前身是一个react native的插件 搜索 添加插件的依赖 配置安卓部分的代码 以为安卓的模式打开项目 在MainActivity.java这个项目里面. res下添加一个安卓资源文件. 在

解决android 启动白屏问题

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

android App启动白屏

app启动的时候在启动也显示之前会出现白屏或黑屏的情况. 主要是因为视图没有及时填充上造成的,解决方式如下: 在style中添加以下代码: <style name="SplashTheme" parent="AppTheme"> 1 <!--<item name="android:windowBackground">@drawable/first</item>-->//此行可以给window设置背景

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

在做搜芽的过程中,发现那个外包人缘做的不行,因为启动的时候会停顿,然后白屏一会,联想到几个月前我在我的三僚企业通信软件里面拉起9K-Mail的时候也会黑屏,所以决定学习一下.解决一下.这不,万能的网络还是非常有用的. 在这里总结一下. (参考及转载:http://www.2cto.com/kf/201409/339293.html) 欢迎页启动的线程由于请求和处理的数据量过大而,导致欢迎页在出现之前界面上会有一个短暂的白色闪屏停留,当然白色闪屏的停留是因为 application 的主题样式an

App 冷启动与热启动及启动白屏优化

介绍一下 app 冷启动和热启动方式来实现 app 秒开的效果.那么,先来看看什么叫冷启动和热启动. 冷启动:指 app 被后台杀死后,在这个状态打开 app,这种启动方式叫做冷启动. 热启动:指 app 没有被后台杀死,仍然在后台运行,通常我们再次去打开这个 app,这种启动方式叫热启动. 那么,何为闪屏页呢?这个大家一般都知道,我们 app 也非常常见的.比如微信.QQ 等等应用,你将这些应用清除掉它们的后台运行的情况下,再去打开.这时候会出现一个闪屏页,类似我们的背景页.这个页面停留的时间

记录下自己VUE项目用Hbuider打包后启动白屏问题

刚用VUE做项目,之前测试时vue创建的自身项目打包都是启动OK没问题.今天打包自己的时,启动一直白屏.折磨了好久,百度了一堆.终于找到了方法. 首先是在config/index.js里面 build: { // Template for index.html index: path.resolve(__dirname, '../dist/index.html'), // Paths assetsRoot: path.resolve(__dirname, '../dist'), assetsSu

Android 启动白屏或者黑屏闪现解决

1.设置Style //1.设置背景图Theme 1 <style name="Theme.AppStartLoad" parent="android:Theme"> 2 <item name="android:windowBackground">@drawable/ipod_bg</item> 3 <item name="android:windowNoTitle">true&

(Android)react-native-splash-screen实践-解决react-native打包好后启动白屏的问题

1.安装 npm i react-native-splash-screen --save or yarn add react-native-splash-screen --save 2.自动配置 react-native link react-native-splash-screen or rnpm link react-native-splash-screen or 3.手动配置 3.1 android/settings.gradle include ':react-native-splash

ionic3 启动白屏处理

重点就就三点 1.设置不自动隐藏splashscreen页面,设置最多延迟10s再关闭,这样可以不显示启动前的白画面 <preference name="AutoHideSplashScreen" value="false" /> <preference name="FadeSplashScreenDuration" value="5000" /> <preference name="S