Android 屏幕适配,基础知识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38998213/article/details/89484741

什么是adb?

Adb是Android Debug Bridge的缩写。它允许开发人员执行远程shell命令。其基本功能是允许和控制来往仿真器端口的通信

activity的四个基本状态是什么?

Active- 活动在前台;

Paused- 活动在后台并仍然可见;

Stopped- 活动不可见,被其他活动隐藏;

Destroyed- 活动进程被杀死或完成终止;

屏幕适配:

布局适配

这种适配方案基本上不怎么使用了,因为实在是太耗费资源,试想一下。多写一套布局,而大部分的代码都是相同的,纯粹是为了适配而做的这些事情,无疑增加了开发者的负担以及使程序变得更冗余和庞大,我个人认为,实在是得不偿失。

权重适配

这是 LinearLayout 的特有属性:weight,意味权重,我们可以让界面布局按照我们设定的比例来显示。比如,现在有个需求,要求界面上有两个控件,一个占屏幕宽的1/3,另一个占屏幕宽的2/3。

代码适配

有一些情况下,我们需要去动态的设置控件的大小或者是控件的位置,比如dialog或者popupwindow的偏移量或者是显示的位置等等,这个时候在xml布局里就显得有点乏力,我们可以根据当前屏幕的大小属性来设置合适的数值。

图片适配 + 多套切图的解决办法

1、图片适配

图片适配什么意思?为什么要有图片适配? 切多套图,正确的图片放入正确的文件夹下面;这是因为每个手机的屏幕密度都不一样,当程序运行到手机上时,系统会根据当前手机所对应的屏幕密度去找相应文件夹下面的图片。这样做的好处就是节省内存;

不同的手机屏幕加载同样的图片内存占用是不一样的,做好图片适配可以大大的减少手机运行内存 ,但是包相对会大一点。

假设你只在xhdpi文件夹下有对应的图片资源文件(mdpi文件夹是空的),那么SDK会去xhdpi文件夹找到相应的图片资源文件,然后将原有大像素的图片自动缩放成小像素的图片,于是大像素的图片照样可以在小像素分辨率的手机上正常显示。xhdpi应该是首选

 使用.9图

Android里有9patch图的概念,也就是.9图,能够自动拉伸你指定的地方,这其实是一种格式特殊的png文件,能指明可以拉伸以及不可拉伸的区域,同时还可以把显示内容区域的位置标示清楚。

使用 Vector Asset

dp + dimens 适配:

先说dp,是根据手机像素计算的,比如320x480,它的宽是320个px,那我们就要写160px,用dp来表示就是160dp就是一半的屏幕。

ANR是处理超时,所以应该把耗时操作或者复杂计算逻辑交给Thread来处理。如果需要UI操作,用Handler协助更新UI。

静态内部类:静态内部类的使用目的。 在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。不过由于种种的原因,如使用上的限制等等因素

out of memary :总结: 
1、Handler持有的引用最好使用弱引用,在Activity被释放的时候要记得清空Message,取消Handler对象的Runnable; 
2、非静态内部类、非静态匿名内部类会自动持有外部类的引用,为避免内存泄露,可以考虑把内部类声明为静态的; 
3、对于生命周期比Activity长的对象,要避免直接引用Activity的context,可以考虑使用ApplicationContext; 
4、广播接收器、EventBus等的使用过程中,注册/反注册应该成对使用; 
5、不再使用的资源对象Cursor、File、Bitmap等要记住正确关闭; 
6、集合里面的东西、有加入就应该对应有相应的删除。

GPU过度绘制:

GPU过度绘制定义

如果你粉刷过一个房间或一所房子,就会知道给墙壁涂上颜色需要做大量的工作。假如你还要重新粉刷一次的话,第二次粉刷的颜色会覆盖住第一次的颜色,第一次的颜色就永远不可见了,等于你第一次粉刷做的大量工作就完全被浪费掉。这太可怕了。

同样的道理,如果在你的应用程序中浪费精力去绘制一些东西同样会产生性能问题。过度绘制这个名词就是用来描述屏幕上一个像素在单个帧中被重绘了多少次。

GPU过度绘制就指的是在屏幕一个像素上绘制多次(超过一次),GPU过度绘制或多或少对性能有些影响。

GPU过度绘制分析

过度绘制其实是一个性能和设计的交叉点。我们在设计上追求很华丽的视觉效果,但一般来说这种视觉效果会采用非常多的层叠组件来实现,这时候就会带来过度绘制的问题。我们再来看看具体显示在Android界面层级关系:

当我们来绘制一个界面时,会有一个windows,然后是建立Activity,在Activity里可以建立多个view,或view group,view也可以嵌套view。这些组件从上到下分布,上面的组件是可以被用户看见的,而在下面的组件是不可见的,但是我们依然要花很多时间去绘制那些不可见的组件,因为在某些时候,它也可能会显示出来。

猜你喜欢

转载自blog.csdn.net/qq_38998213/article/details/89484741