首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android vitals 帮您解决应用质量问题

通过这种途径获得的信息量是其他方式无法匹及的,即使是硬件实验室测试也不行。 Android vitals 可以向开发者发送以下三种警告:崩溃、应用程序无法响应以及渲染次数。...Android vitals 如何显示过度唤醒 Android vitals 能够帮助开发者了解自己的应用是否存在唤醒次数太多的问题。...通过收集有关应用行为的匿名数据,Android vitals 可以显示有多少比例的用户在设备满电之后,每小时经历 10 次以上的设备唤醒。...如何检测应用程序无法响应原因 寻找触发 ANR 的原因不容易,我们拿 URL 类举个例子: 您想看到 URL#equals (判断两个 URL 是否相同的方法) 阻塞线程吗?...同时,您也可以自己选择让 StrictMode 通过何种方式告知已检测到阻塞调用:应用崩溃、日志记录还是显示对话框?您可参看 ThreadPolicy.Builder class 获取进一步信息。

1.5K10

检测Android应用的启动和关闭

原文链接:Determine when App is Opened or Closed 译文出自:开发者前线 入门指南 应用的activity是否显示在界面是决定应用是打开还是关闭的核心因素。...是用户点击了通知,还是他们点击了链接,又或者是他们只是从应用图标或最近任务中点进来的? 记录启动方式 首先我们要在某个地方记录应用打开的方式。...在这段代码中,我在application类中添加了一个枚举类型变量用来记录应用是如何被打开的。这个建立在上一个例子的基础之上,所以我们打印一下日志,来看看应用是什么时候被打开的和如何被打开的。...所以下一步就是在用户通过链接或通知打开应用的时候设置启动方式。如果不是上述两个方式,则说明用户是直接打开应用的。...记录链接点击 为了记录用户通过点击链接打开应用,需要在某个地方拦截这个链接,加入下面这行代码。确保这行代码在activity的onStart()之前调用的。

3.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android任务和返回栈完全解析,细数那些你所不知道的细节

    这样,如果另外一个应用程序中的某个Activity声明自己是可以响应这种Intent的,那么这个Activity就会被打开。...手机的Home界面是大多数任务开始的地方,当用户在Home界面上点击了一个应用的图标时,这个应用的任务就会被转移到前台。...任务除了可以被转移到前台之外,当然也是可以被转移到后台的。当用户开启了一个新的任务,或者点击Home键回到主屏幕的时候,之前任务就会被转移到后台了。...再举一个例子,Android系统内置的浏览器程序声明自己浏览网页的Activity始终应该在一个独立的任务当中打开,也就是通过在元素中设置"singleTask"启动模式来实现的。...这个时候,你自己的应用程序通过Intent去启动了这个用于显示天气信息的Activity,那么此时这个Activity应该是和你的应用程序是在同一个任务当中的。

    1.5K70

    App冷启动,你还要我怎样?

    什么叫冷启动 拿起你的手机,把后台的任务都清理掉,然后再点击你想要打开的app图标,这个时候,就是所谓的app冷启动了。有人肯定会说,有冷启动那不是还有热启动?...方法一:IntentService 简单说,IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService...你的库初始化好了,我的app的用户体验就下降了)。那么,还有其他方法去解决初始化时间的问题吗?那肯定有啦,刚刚不是说了是方法一吗?现在就开始介绍方法二了。 方法二:简单粗暴法 何为简单粗暴法呢?...上图是方法二app冷启动的打开流程图,这个流程我就不说了,自己看图吧,这里代码也没什么还写,无非就是写EventBus的发送事件和处理事件,这个也不用上代码了吧?...我大概测试了一下,优化的空间还是比较大的,可以缩短50%的时间左右,也就是说如果你的app一开始打开的时候需要三四秒,使用了这个简单粗暴法之后只需要一秒多就能打开了,是不是很爽?

    1.7K00

    App冷启动,你还要我怎样?

    什么叫冷启动 拿起你的手机,把后台的任务都清理掉,然后再点击你想要打开的app图标,这个时候,就是所谓的app冷启动了。有人肯定会说,有冷启动那不是还有热启动?...你的库初始化好了,我的app的用户体验就下降了)。那么,还有其他方法去解决初始化时间的问题吗?那肯定有啦,刚刚不是说了是方法一吗?现在就开始介绍方法二了。 方法二:简单粗暴法 何为简单粗暴法呢?...image.png 上图是方法二app冷启动的打开流程图,这个流程我就不说了,自己看图吧,这里代码也没什么还写,无非就是写EventBus的发送事件和处理事件,这个也不用上代码了吧?...我大概测试了一下,优化的空间还是比较大的,可以缩短50%的时间左右,也就是说如果你的app一开始打开的时候需要三四秒,使用了这个简单粗暴法之后只需要一秒多就能打开了,是不是很爽?...总结 其实,我一直都这样认为的,代码是死的,但是人是活的,所以我们可以使用很多简单粗暴的方法去解决一下比较顽固的问题,不要一味说什么不符合逻辑不符合代码规范(不过一些最基本的代码规范还是要遵循的,因为代码写出来不只是给自己看的

    1.1K20

    Android 面试之必问性能优化

    对于Android开发者来说,懂得基本的应用开发技能往往是不够,因为不管是工作还是面试,都需要开发者懂得大量的性能优化,这对提升应用的体验是非常重要的。...1,启动优化 一个应用的启动快慢是能够直接影响用户的使用体验的,如果启动较慢可能会导致用户卸载放弃该应用程序。...在 Android Studio 中打开您的项目,在您的设备上构建并运行项目。 启动 Android Device Monitor。...2.5 内存抖动 在我们优化过view的树形结构和overdraw之后,可能还是感觉自己的app有卡顿和丢帧,或者滑动慢等问题,我们就要查看一下是否存在内存抖动情况了。...知道了系统是如何计算耗电的,我们也就可以知道应用在后台不应该做什么,例如长时间获取 WakeLock、WiFi 和蓝牙的扫描等,以及后台服务。

    90200

    Android 面试之必问性能优化

    对于Android开发者来说,懂得基本的应用开发技能往往是不够,因为不管是工作还是面试,都需要开发者懂得大量的性能优化,这对提升应用的体验是非常重要的。...1,启动优化 一个应用的启动快慢是能够直接影响用户的使用体验的,如果启动较慢可能会导致用户卸载放弃该应用程序。...在 Android Studio 中打开您的项目,在您的设备上构建并运行项目。 启动 Android Device Monitor。...2.5 内存抖动 在我们优化过view的树形结构和overdraw之后,可能还是感觉自己的app有卡顿和丢帧,或者滑动慢等问题,我们就要查看一下是否存在内存抖动情况了。...知道了系统是如何计算耗电的,我们也就可以知道应用在后台不应该做什么,例如长时间获取 WakeLock、WiFi 和蓝牙的扫描等,以及后台服务。

    90231

    如何用 Android vitals 解决应用程序的质量问题

    这些问题都直接影响你的用户对应用的体验和看法。此外,还有一类用户可能不会直接与你的应用关联的不良应用行为:比如耗电的速度比预期的要快。 在本文中,我将着眼于以下两个问题: 过度唤醒。...因此,将任何可能延迟其工作的操作都转移到后台线程是至关重要的。 Android vitals 如何显示 ANR?...我如何检测 ANR 的原因? 查找 ANR 的原因可能会非常棘手,就拿 URL 类来说吧。 你觉得确定两个 URL 是否相同的 URL#equals 方法是否会被阻塞?...在应用程序启动时使用 StrictMode#setThreadPolicy 可以自定义你想要检测的内容,包括磁盘和网络读写,甚至可以通过 StrictMode#noteSlowCall 在应用程序中触发自定义的慢速调用...你还可以选择 StrictMode 在检测到阻塞调用时如何提醒你:通过让应用程序崩溃、Log 信息或者是显示对话框。更多详细信息,请参阅 ThreadPolicy.Builder类。

    2.3K10

    Android N上一些新特性的介绍「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。...新的系统快捷开关 在Android N中,下拉打开通知栏顶部即可显示5个用户常用的快捷开关,支持单击开关以及长按进入对应设置。...4.通知信息快速回复 Android N加入了全新的API,支持第三方应用通知的快捷操作和回复,例如来电会以横幅方式在屏幕顶部出现,提供接听/挂断两个按钮;信息/社交类应用通知,还可以直接打开键盘,在输入栏里进行快捷回复...此外,谷歌还扩展了ConnectivityManager API的能力,使得应用可以检测系统是否开启了流量保护模式,或者检测自己是否在白名单中。...Doze休眠机制是当设备处于空闲状态时,通过推迟应用的 CPU 和网络活动以实现省电目的的系统模式。 在 Android N 中,Doze休眠机制又前进了一步。

    1.3K20

    Activity 的 36 大难点,你会几个?「建议收藏」

    ) 掉 递归退出 就调用 finish() 方法 把当前的 Activity 退出 在打开新的 Activity 时使用 startActivityForResult , 然后自己加标志, 在 onActivityResult...如果是在别的应用程序中启动它,则会新建一个 task ,并在该task中启动这个 Activity ,singleTask 允许别的 Activity 与其在一个 task 中共存,也就是说,如果我在这个...该类是一个抽象( abstract class )类, Android 提供了该抽象类的具体实 现类( ContextIml )。...通过它我们可以获取应用程序的资源和类, 也包括一些应用级别操作, 例如:启动一个 Activity ,发送广播,接受 Intent ,信息,等。...在 Android 中,如果你的应用程序有一段时间没有响应,系统会向用户显示一个对话框,这个对话框称作应用程序无响应对话框。

    79420

    PermissionX 1.7发布,全面支持Android 13运行时权限

    还记得上次发布PermissionX 1.6版本还是在去年10月份的时候,当时是对Android 12系统进行了支持。...因为在Android 13以下的系统,虽然应用程序可以不经过用户同意就发送通知,但是用户也有权力去屏蔽任何应用程序的通知,效果等同于用户拒绝了通知权限。...那么为了防止用户屏蔽掉了一些重要通知,某些应用的做法是主动检测通知是否被屏蔽,如果屏蔽的话就引导用户去设置页面手动开启。 而Android 13引入通知权限之后,以前的写法就不行了。...只要用户点击了同意,那么就会一键跳转到当前应用的通知设置界面,让用户用最低的操作成本来打开通知开关。...可以看到,在Android 13上申请BODY_SENSORS权限时,用户只能授权在前台使用。 那么如果我们的应用程序就是要在后台获取运动传感器数据怎么办呢?

    3.5K10

    悬浮窗开发设计实践

    7.1 处理输入法层级关系7.2 边界逻辑关闭悬浮窗7.3 点击多次打开页面7.4 Home键遇到的问题01.整体概述1.1 项目背景业务场景分析以视频通话为例,在视频通话时,我们打开其他应用或点击Home...如何实现悬浮窗左右边的吸顶效果?监听到手指抬起(UP事件)的动作后,判断当前位置是靠近左边还是右边,靠近左边就以位置动画的方式平移到左边,靠近右边就平移到右边。...实际上这么做还是有问题的,在部分手机上如果是在首页按返回键的话仍然不能隐藏,这个又是系统级的兼容性问题。...为了解决这问题,后面又做了一个处理,通过注册registerActivityLifecycleCallbacks监听app的前后台回调,检测到如果当前首页被销毁时,应该将悬浮窗进行隐藏。...7.3 点击多次打开页面问题说明一下如果你的悬浮窗点击事件是打开页面的话,这里需要注意了,别忘了将这个打开的页面的启动模式设置为singleTop或者是singleTask,从而复用同一个,远离一直按返回的地狱操作

    2.5K40

    2020年了,Android后台保活还有戏吗?看我如何优雅的实现!

    但有一部分应用,应用本身的使用场景就需要在后台运行,用户也是愿意让它在后台运行的,比如跑步类应用、一些懒得对接厂商推送通道的IM应用、消息推送资讯类应用等。...如果要判断用户是否点击了允许,可以在申请的时候调用 startActivityForResult,在 onActivityResult 里再判断一次是否在白名单中。...-> 打开应用开关 -> 电池管理 -> 未监视的应用程序 -> 添加应用。...在之前做的跑步应用中,我在设置里增加了一个权限设置页面,将上面提到的设置放在这里面。 最近发现友商某咚也跟进了,图 1 是我们做的,图 2 是某咚做的: ?...某咚从设计、从我写的不够好的文案,甚至是我从十几台手机上一张一张截下来的图,进行了全方位的致敬。感谢某咚的认可,但最近在某个发布会上听到这么一句话:在致敬的同时,能不能说一句谢谢?

    5.8K21

    Android通知栏微技巧,8.0系统中通知栏的适配

    很大一部分原因都是因为开发者没有节制地使用导致的。就好像App保活一样,直到今天还是不断有人问我该如何保活App,试想如何每个人都能保活自己的App,那么最终受害的人是谁?..." } } 可以看到,这里我在创建新项目的时候默认targetSdkVersion就是26,如果你是低于26的话,说明你的Android SDK有些老了,最好还是更新一下。...另外,点击上图中的所有类别就可以进入到当前应用程序通知的完整设置界面。 管理通知渠道 在前面的内容中我们已经了解到,通知渠道一旦创建之后就不能再通过代码修改了。既然不能修改的话那还怎么管理呢?...只讲概念总是不容易理解,我们还是通过具体的例子来学习一下。想一想我们开发的是一个类似于微信的App,聊天消息是至关重要的,如果用户不小心将聊天消息的通知渠道给关闭了,那岂不是所有重要的信息全部都丢了?...现在重新运行一下程序,并点击发送订阅消息按钮,然后在Launcher中找到NotificationTest这个应用程序,如下图所示: ?

    2.9K40

    Android 后台运行白名单,优雅实现保活

    系统这种做法本身出发点是好的,因为可以节省内存,降低功耗,也避免了一些流氓行为。 但有一部分应用,应用本身的使用场景就需要在后台运行,用户也是愿意让它在后台运行的,比如跑步类应用。...对于那些确实需要在后台运行的应用,我们如何做到优雅的保活呢? 后台运行白名单 从 Android 6.0 开始,系统为了省电增加了休眠模式,系统待机一段时间后,会杀死后台正在运行的进程。...的时候,你就知道怎么怼回去了。大厂通过和手机厂商的合作,将自己的应用默认加入到白名单中。如果你在一个能谈成这种合作的大厂,也就不用往下看了。 好在系统还没有抛弃我们,允许我们申请把应用加入白名单。...如果要判断用户是否点击了允许,可以在申请的时候调用 startActivityForResult,在 onActivityResult 里再判断一次是否在白名单中。...几乎各个厂商都有自己的后台管理,就算应用加入了后台运行白名单,仍然可能会被厂商自己的后台管理干掉。 如果能把应用加入厂商系统的后台管理白名单,可以进一步降低进程被杀的概率。

    9.2K41

    Android面试题大全

    在 android stdio会自动生成,但 eclipse 需要自己手动添加 定义与作用: Activity 的中文意思是 活动,代表手机屏幕的一屏,或是平板电脑中的一个窗口,提供了和用户交互的可视化界面...系统到底是如何根据一个 Uri 就能够提供给我们准确的结果呢?只有自己亲自实现一个看看了。...和之前提到的一样,想重新自定义自己程序中的四大组件,就必须重新实现一个类,重写这个类中的抽象方法,在清单文件中注册,最后才能够正常使用。...Android类加载器 在Android开发中,不管是插件化还是组件化,都是基于Android系统的类加载器ClassLoader来设计的。...通过变化属性来达到动画的效果,性能略差,支持点击等事件。android 3.0 Gif动画:原理和帧动画差不多,是canvas画出来。

    1.3K50

    Android拾萃- Activity的生命周期和启动模式

    Android系统是通过Activity栈来管理Activity的,而Activity则是通过哦生命周期来进行自己的创建、活动与销毁等。所以掌握Activity生命周期很有必要。 金字塔模式 ?   ...异常情况下的生命周期 在有些情况下,您的 Activity 会因正常应用行为而销毁,比如当用户按 返回按钮或您的 Activity 通过调用 finish()示意自己的销毁。...如果Activity A 启动 B 在启动 C,如果A和B被回收了,这个时候C返回,B会重绘(实例被回收了,但是栈还是在的) 由重建引发的窗体泄漏 Android的每一个Activity都有个WindowManager...在我们退出应用程序时,必须把所有的任务栈中所有的activity清除出栈时,任务栈才会被销毁。当然任务栈也可以移动到后台, 并且保留了每一个activity的状态....这是一种单例模式,与singTop点类似,只不过singTop是检测栈顶元素是否有需要启动的Activity,而singTask则是检测整个栈中是singleTask 模式否存在当前需要启动的Activity

    1.6K50

    Android性能优化(一)

    视觉优化 应用程序启动有三种状态,每种状态都会影响应用程序对用户可见所需的时间:冷启动,热启动和温启动。 在冷启动时,应用程序从头开始。在其他状态下,系统需要将正在运行的应用程序从后台运行到前台。...内存抖动现象 在我们优化过view的树形结构和overdraw之后,可能还是感觉自己的app有卡顿和丢帧,或者滑动慢:卡顿还是存在。...对于线上的大数据来说,还是可以帮助我们发现代码中的一些隐藏问题。 根据应用的前后台状态,我们可以把异常退出分为前台异常退出和后台异常退出。...崩溃的进程是前台进程还是后台进程,崩溃是不是发生在 UI 线程。 崩溃堆栈和类型。崩溃是属于 Java 崩溃、Native 崩溃,还是 ANR,对于不同类型的崩溃关注的点也不太一样。...这种情况下的崩溃堆栈可能完全没有我们自己的代码,很难直接定位问题。能做的有: 查找可能的原因。通过上面的共性归类,我们先看看是某个系统版本的问题,还是某个厂商特定 ROM 的问题。

    2.7K20

    强大的Flutter App升级功能

    对于应用程序升级功能的重要性就无需赘言了,下面介绍下应用程序升级功能的几种方式,从平台方面来说: IOS平台,应用程序升级功能只能通过跳转到app store进行升级。...流程说明: 访问后台接口获取是否有新的版本,这里和IOS是一样的,有则弹出升级提示框,判断当前版本是否为“强制升级”,如果是则只提供用户一个“升级”的按钮,否则提供用户“升级”和“取消”按钮。...弹出提示框后有用户选择是否升级,如果选择“取消”,提示框消失,如果选择“升级”,判断是跳转到应用市场进行升级还是通过下载apk升级。...用户点击允许,出现如下界面: ? 点击继续安装即可,上面的安装引导界面是系统界面,不同的手机或者不同的Android版本会略有不同。...如果有,请在文章底部留言和点赞,以表示对我的支持,你们的留言、点赞和转发关注是我持续更新的动力!

    2.2K10

    Android系统中也存在Web注入吗?

    例如,Acecard (点击阅读原文查看)家族的移动银行木马就使用了这种方法。 ? 2. 通过一个位于攻击者服务器上的网络钓鱼页面,覆盖用户应用程序。这样攻击者,便可以随时修改其内容。...值得注意的是,从Android 6.0开始,FakeToken木马想要覆盖其它应用程序,则必须弹框请求用户以获取特权,然后才能实现覆盖。...最早版本的此类重定向木马,是在2016年4月之后被发现的,最新版本为2016年11月上半年出现。 下面让我来简单介绍下,页面重定向钓鱼技术它的工作方式。...这样木马知道哪个网页当前打开,如果它恰好是目标网页之一,木马会在同一浏览器中打开相应的网页仿冒页面,并将用户重定向到那里。...总结 我们可以说,尽管那些针对银行的攻击者有技术能力,实现对移动浏览器或移动应用程序的恶意注入,但是他们一般不会这么做。更多的时候他们是通过这种技术,来投放一些虚假广告信息,并以此牟利。

    97950
    领券