首页 文章 精选 留言 我的

精选列表

搜索[优化],共10000篇文章
优秀的个人博客,低调大师

Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏

大家会发现一个空项目,从手机桌面打开app是秒启动。但是对于自己开发的项目,有时会发现打开app的时候,会有短暂的1秒--2秒的白屏或者黑屏,然后才进入到程序界面。 个人理解为我们自己实现的Application文件里面做了较多的初始化操作,当这些初始化操作完成后才进入到第一个Activity,这段初始化的时间因为没有界面,应用便会因为主题的类别而显示白屏或者黑屏。 构成白屏/黑屏的原因代码如下: /*** @author xqx* @email djlxqx@163.com* blog:http://www.cnblogs.com/xqxacm/* createAt 2017/1/30* description: 进行第三方的初始化等操作*/ public class XApplication extends Application{ @Override public void onCreate() { super.onCreate(); // 环信初始化 // EaseUI.getInstance().init(this,null); // EMClient.getInstance().setDebugMode(true); // 友盟统计 普通统计场景类型 MobclickAgent.setScenarioType(this, MobclickAgent.EScenarioType. E_UM_NORMAL); //禁止默认的页面统计方式,这样将不会再自动统计Activity。 MobclickAgent.openActivityDurationTrack(false) ; //日志加密 MobclickAgent.enableEncrypt(true);//6.0.0版本及以后 //错误日志统计 MobclickAgent.setCatchUncaughtExceptions(true); // 页面访问路径统计 MobclickAgent.openActivityDurationTrack(true); // 极光 JPushInterface.setDebugMode(true); JPushInterface.init(this); /....各种三方初始化 } 解决方法,给应用的第一个Activity单独设置一个不同的主题,一般第一个Activity即为启动页。 我们只要在res/values/styles.xml 文件中写一个主题继承自我们应用的主题 <!-- Base application theme. --> <!-- 应用的主题. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <!--启动页Activity主题,解决开启时1-2秒的白屏问题 , 继承自应用的主题 , 只需要给应用第一个Activity设置此主题即可,一般为启动页--> <style name="MyGuideTheme" parent="AppTheme"> <!-- Customize your theme here. --> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> </style> 然后在AndroidManifest.xml文件中,给启动页设置这个主题即可。 <activity android:name=".ui.moduleLogin.GuideActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait" android:theme="@style/MyGuideTheme" // 这个Activity单独设置主题 > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 注意:1、这个解决方法会有一个bug,在小部位机型上设置了该主题的Activity,如果用户进入到最近列表(长按home键或者按菜单键)会出现闪烁问题。 所以我们不能将整个应用的主题都设置为这个,只需要启动页设置,因为启动页只有少数的1-2秒即进入主界面,用户进入最近列表的触发可能性极低,体验较好。 2、如果Application中初始化的东西很多,时间较长,比如超过2秒,此方法不适用,会导致用户点击icon2秒后才打开app,用户体验不佳。

优秀的个人博客,低调大师

【web前端优化之图片模糊到清晰】看我QQ空间如何显示相片

前言 此篇文章估计不会太长,有移除首页的风险,但是老夫(称老夫是因为我们真正的叶小钗其实都100多岁啦)是不会怕滴。所以,我来了哟! 题外话:今天我们一起还看了一道前端的面试题,而后我本来还想多找几道来做做,但是没找到什么合适的,各位有什么好的前端面试题请给我留言哦,我们一起来分析面试题进步哟! 前端时间,我与我们的产品有一次讨论,是针对图片压缩的,因为我对图片或者说PS这块是个小白,所以当时做了一个广告图片有100来k也直接给传上去了,结果被我们的同事搞起来一压缩,便只有50多k了,此次交流对图片压缩这块有了一点点心得,并且为第二次交流埋下伏笔,第二次便是图片由模糊变清晰的研究了。 网页图片格式 此处我先对我们的图片格式做一下普及吧,参考: 【整理】详说JPG,GIF及PNG各类型的图片格式 GIF 透明类型,可以全透明或者全不透明,半透明这种事情就不要找他了,并且这个家伙可以做动画哦 gif是一种无损耗的图片格式 gif采用lzw算法进行压缩,当压缩gif过程中像素由上到下进行压缩,也就是说横向的gif图片比纵向的小(500*10比10*500小) gif支持可选择性的间隔渐进显示 JPEG 不支持透明 不支持动画 该图片非常容易损耗 支持隔行渐进显示(ie不支持,ie会再整个图片信息完全到达后再显示) jepg尤其适合web上面的摄影图片和数字相册 PNG 支持各种透明,但在IE6下有bug需要使用滤镜处理 不支持动画 任何操作都不会损耗其质量 支持间隔渐进增强,但会造成图片尺寸变大: 复制代码 png8(布尔透明) 相当于静态gif,只有256色,支持索引透明,就是指定一个像素点不是透明 png8(alpha透明) 可指定像素点的透明度,例如50%透明度 优点在于比png24/32小,效果一样,缺点为ie6不支持 png24 不透明,颜色很多不止256色,PS导出的png24事实上为png32 png32 和PS里面的PSD一样,包含图层和通道信息 复制代码 以上是关于图片的一些信息,我们大概了解下便是,其中我要说一说其中的PNG,特别是交错png PNG交错在使用浏览器欣赏该图片时就会以由模糊逐渐转为清晰的效果方式渐渐显示出来。PNG先进的交错式方法,使图像得以水平及垂直方式显像在屏幕上,加快了下載的速度,作用:交错可使下载时间感觉更短,并使浏览者确信正在进行下载。PNG无交错、不交错就没这个作用。 图片的显示 我们知道img标签在dom加载时候是不会加载的,而是在dom结构全部出来后并形成了渲染树(布局结束),才开始加载。 而其加载顺序也是从上而下的加载,意思是图片我们是先看到上面再看到下面,但是很明显这不是一个好的显示方式,我们若是一开始可以看到模糊的图形然后再慢慢变清晰是不是好很多呢? 肯定好很多啦。。。 于是我们讨论到如何实现,但是就说到了交错PNG,我当时虽然信了,因为我对此不太了解,但是下来思考下却感觉有点不对劲! 用户的疑惑 现在我们来想象下QQ空间的做法(这块纯粹瞎扯),我现在作为一个用户,我上传图片来了 ① 我想将QQ空间作为云存储的地方,上传了我2M的毕业照 ② 空间根据需求生成了一张缩略图与一张大图 ③ 我们首先看到缩略图,而后看到大图,点击原图时候便看到我最初2M的照片 以上是我以为的逻辑,QQ空间是不是这个逻辑我们不去关注他,因为站在用户角度,我一定是想保留我最初的东西。 好了事到如今,QQ空间究竟怎么做的呢???那个太复杂了,我们也不去关注,我这里说下我是怎么做的。 实现图片由模糊到清晰 我们的相册显示一般是这个样子的: 上面是缩略图,下面是大图,在这里我们其实可以对其缩略图做文章!!! 我们在大图显示完之前可以用缩略图“代替”大图吗,来看看我们的逻辑: ① 缩略图在相册上方,其最先加载,就算在下方,因为缩略图尺寸很小加载十分迅速 ② 最初将缩略图放到大图显示位置,将其大小设置为大图大小(此尺寸有多种方法可获取,比如上传时候便计算结束) ② 将大图布局置于缩略图前,因为缩略图已经展示,但是因为过大而显得有点模糊,但大图慢慢加载其由上至下变得清晰给人一种模糊到清晰的错觉 ④ 流程结束 于是我们来看看我们的QQ空间吧,看之前我们用限速工具,给我们的火狐限速: PS:限速后开空间巨慢。。。 怎么样,够慢了的吧! 注意看其由上到下的变化哦,然后我这里找出了证据 PS:我打开网上限制怎么还是很慢,看来是我网速慢的原因啦。。。 请看我这边用红框圈着的三块地方: 第一个为相册显示的容器,relative定位的 第二个为上面的小缩略图,很小的那种哦: 看吧,这里活生生的将人家扯那么大。。。。。 第三个框便是主角,大图啦: 结论 从其整个排布来看,与我们思考的一致,他这样做好处多多的有哦,比如我们这里上面的图片导航: 我们看到上面的缩略图早就显示出来了,点击下一张的时候缩略图会展示出来,不会出现空白的断层,然后大图慢慢的显示让用户愿意停在那里。 结语 好啦,今天我们研究了一道面试题,后面又研究了图片由模糊到清晰的方案,若是您有更好的解决方案不要藏着哦! 好啦,若是你有好的web前端面试题也请留下,我最近在做这方面的整理,后面对各位也会有帮助滴,最后留一张老夫的玉照吧! 本文转自叶小钗博客园博客,原文链接http://www.cnblogs.com/yexiaochai/p/3151662.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

【转】IOS设备旋转的内部处理流程以及一些【优化建议】

加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向: typedefNS_ENUM(NSInteger, UIDeviceOrientation) { UIDeviceOrientationUnknown, UIDeviceOrientationPortrait, // Device oriented vertically, home button on the bottom UIDeviceOrientationPortraitUpsideDown,// Device oriented vertically, home button on the top UIDeviceOrientationLandscapeLeft, // Device oriented horizontally, home button on the right UIDeviceOrientationLandscapeRight, // Device oriented horizontally, home button on the left UIDeviceOrientationFaceUp, // Device oriented flat, face up UIDeviceOrientationFaceDown // Device oriented flat, face down }; 以及如下四种界面方向: typedefNS_ENUM(NSInteger, UIInterfaceOrientation) { UIInterfaceOrientationPortrait =UIDeviceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown =UIDeviceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft =UIDeviceOrientationLandscapeRight, UIInterfaceOrientationLandscapeRight =UIDeviceOrientationLandscapeLeft }; 一、UIKit处理屏幕旋转的流程 当加速计检测到方向变化的时候,会发出UIDeviceOrientationDidChangeNotification通知,这样任何关心方向变化的view都可以通过注册该通知,在设备方向变化的时候做出相应的响应。 UIKit的相应屏幕旋转的流程如下: 1、设备旋转的时候,UIKit接收到旋转事件。 2、UIKit通过AppDelegate通知当前程序的window。 3、Window会知会它的rootViewController,判断该view controller所支持的旋转方向,完成旋转。 4、如果存在弹出的view controller的话,系统则会根据弹出的view controller,来判断是否要进行旋转。 二、UIViewController实现屏幕旋转 在响应设备旋转时,我们可以通过UIViewController的方法实现更细粒度的控制,当view controller接收到window传来的方向变化的时候,流程如下: 1、首先判断当前viewController是否支持旋转到目标方向,如果支持的话进入流程2,否则此次旋转流程直接结束。 2、调用willRotateToInterfaceOrientation:duration:方法,通知view controller将要旋转到目标方向。如果该viewController是一个container viewcontroller的话,它会继续调用其content view controller的该方法。这个时候我们也可以暂时将一些view隐藏掉,等旋转结束以后在现实出来。 3、window调整显示的view controller的bounds,由于view controller的bounds发生变化,将会触发viewWillLayoutSubviews方法。这个时候self.interfaceOrientation和statusBarOrientation方向还是原来的方向。 4、接着当前view controller的willAnimateRotationToInterfaceOrientation:duration:方法将会被调用。系统将会把该方法中执行的所有属性变化放到动animationblock中。 5、执行方向旋转的动画。 6、最后调用didRotateFromInterfaceOrientation:方法,通知view controller旋转动画执行完毕。这个时候我们可以将第二部隐藏的view再显示出来。 整个响应过程如下图所示: 以上就是UIKit下一个完整的屏幕旋转流程,我们只需要按照提示做出相应的处理就可以完美的支持屏幕旋转。 三、注意事项和建议 1)注意事项 当我们的view controller隐藏的时候,设备方向也可能发生变化。例如view Controller A弹出一个全屏的view controller B的时候,由于A完全不可见,所以就接收不到屏幕旋转消息。这个时候如果屏幕方向发生变化,再dismiss B的时候,A的方向就会不正确。我们可以通过在view controller A的viewWillAppear中更新方向来修正这个问题。 2)屏幕旋转时的一些建议 在旋转过程中,暂时界面操作的响应。 旋转前后,尽量保持当前显示的位置不变。 对于view层级比较复杂的时候,为了提高效率在旋转开始前使用截图替换当前的view层级,旋转结束后再将原view层级替换回来。 在旋转后最好强制reload tableview,保证在方向变化以后,新的row能够充满全屏。例如对于有些照片展示界面,竖屏只显示一列,但是横屏的时候显示列表界面,这个时候一个界面就会显示更多的元素,此时reload内容就是很有必要的。 本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/p/3258479.html,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册