Articles of 性能

如何限制Android设备网络速度以进行测试

我正在测试一个Android应用程序,它在低质量网络上管理其内容时遇到了一些问题。 我无法validation问题是否仍然存在,因为我家中的网络速度(120mb / s),在我设法启动再现路由之前,所有内容都已经下载。 在这种情况下,使用Android模拟器不是一个选项,因为再现路径需要非常快速的操作来显示问题。 我知道iOS具有允许用户限制网络状况的function,但我无法find适合Android的类似工具。 TL; DR 有没有办法在实际的Android设备上模拟糟糕的网络状况?

默认情况下,在“Asus auto start manager”中设置“允许”权限

我有一个需要在后台运行的应用程序,所以我正在使用WakeFullService。 但是在Asus Zenfone中它没有用,因为Auto Start manager不允许应用程序运行。 我的期望是: 在我们的应用安装期间或应用开放时在自动启动管理器中设置“允许权限”。 华硕自动启动管理器是否有任何API可以帮助我检查我的应用程序的权限状态,以便我可以通过正常文本警报通知用户打开权限。

Android片段及其对性能的影响

我有一个有很多很多视图(200多个)的Activity,现在我将它分成片段,以便稍微分解我的代码。 问题是 – 它如何影响性能? 假设我在一个布局中分层布置了N个视图,并且在片段中分隔了相同数量的视图 – 这在性能方面是否重要? 当我隐藏一个片段时,希望它的视图不被绘制? (所以我可以在这里获得)。 一般来说,如果你能给我一些关于片段性能的书/文章的链接,我会很高兴(谷歌搜索所有的互联网没有结果)。

如何更快地减去这些列表?

我想减去两个ArrayLists,这样我就可以让孩子不在另一个列表中。 我是这样做的: removeIDs=(ArrayList) storedIDs.clone(); removeIDs.removeAll(downloadedIDs); downloadIDs=(ArrayList) downloadedIDs.clone(); downloadIDs.removeAll(storedIDs); 问题是两个列表都包含5000个孩子,我的androidphone需要大约4秒钟。 有没有快速的方法来做到这一点? 是否更快地使用集合?(我在列表中没有重复的值) 我开发了一个Android应用程序

确定和防止Android Scheduling延迟

我目前正在尝试改善应用程序animation的流动性。 我运行了Android systrace并发现了几个调度延迟警报,根据systrace对jank的贡献。 不幸的是,我无法理解systrace提供的其他数据。 有人能指出我正确的方向,如何find调度延迟的原因? 提前致谢

Android垃圾收集器在运行时是否暂停其他应用程序?

我发现了一些关于Android垃圾收集器的信息,这些信息与我相矛盾。 Android Devevelopers指南说: Android 3.0是该平台的第一个版本,旨在在单核或多核处理器架构上运行。 Dalvik VM,Bionic库和其他地方的各种变化增加了对多核环境中对称多处理的支持。 这些优化可以使所有应用程序受益,即使是那些单线程的应用程序。 例如,如果Dalvik垃圾收集器在第二个核心上运行,则使用两个活动核心,单线程应用程序可能仍会看到性能提升。 系统会自动安排。“ 好的,现在另一件事 根据这个链接: Dalvik虚拟机架构 android使用标记和扫描aproach。 Dalvik垃圾收集器中的当前策略是保留标记位,或指示特定对象“可到达”的位,因此不应该是垃圾收集,与其他堆内存分开。 如果我们检查标记和扫描如何在此链接上工作: 标记和扫描垃圾收集算法 ,我们可以看到: 标记和清除方法的主要缺点是在垃圾收集算法运行时正常程序执行被暂停。 特别地,这可能是与人类用户交互或必须满足实时执行约束的程序中的问题。 例如,使用标记和清除垃圾收集的交互式应用程序会定期无响应。 所以我现在的问题是,它是如何运作的? 垃圾收集器在工作时是否会暂停一切,或者是否能够完全独立于其他活动处理器核心运行?

Android:WebView提高了本地html文件的加载速度

有没有办法提高将本地.html文件加载到WebView 。 .html文件存储在/assets文件夹中。 正如您在video中看到的( 抱歉,链接已损坏! ), TextView (红色beackground)在转换开始之前呈现,而WebView的文本随后显示。 如何以与TextView一样快的速度加载WebView ? //current implementation webView.setInitialScale(1); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); webView.setScrollbarFadingEnabled(false); webView.loadUrl(“file:///android_asset/disclaimer.html”); 概要 这是不可能的。 我在这里尝试了所有评论并没有什么区别。 我问的原因是,我们有一个iOS和Android应用程序,主要由简单的TextViews和Images 。 所以我们有了创建本地 html文件的想法,我们可以在两个应用程序中使用它们。 在iOS这就像一个魅力,但在Android我们无法摆脱加载时间,所以我总是有一个空白的屏幕,在100-200ms后,内容出现。 我想如果Activity可见,Androids WebView开始渲染。 这在在线模式下完全有意义,因为您不想加载几个html页面,用户在实际关注它们之前在后台新打开它们。 但是,在脱机模式 (存储在应用程序assets中的本地html文件)中,此行为是不必要的,但您无法更改它。 现在我们现在真的为什么phonegap&co糟透了。 仅供记录:最后,我使用了一个带有空LinearLayout容器的活动,您可以在其中以编程方式插入内容。 每种样式(标题1,标题2,内容……)都有自己的布局xml文件 public void insertHeadline(int id){ String text = getString(id); TextView headline = (TextView) inflater.inflate(R.layout.layout_text_headline, null, false); headline.setText(text); //add this TextView to […]

Android – ViewStub值得吗?

我有一个ListView,其中listview的每一行包含大约10个ImageButtons。 这些按钮中的大多数都具有visibility = Gone,并且仅在极少数情况下出现。 我想知道是否值得用ViewStubs替换这些ImageButton以避免一直为listview的所有行加载它们(以及它们包含的图像)。 然后他们的可见性再次设置为“Gone”,所以我不确定加载它们有什么影响。 他们的图像真的被加载了吗? 请注意,我所说的是将8个ImageButtons替换为8个ViewStub,而不是1个 干杯

Java – 内联代码会有好处吗?

我做了一些研究,但我主要看到c ++的答案。 我最接近的就是这个 。 我也看过这个页面,但它并没有真正解释任何事情。 如果我使用第二段代码有什么好处吗? 会有明显的性能差异吗? 记忆呢? 如果重复完成怎么办? 现在我有这个function。 我确信这样做的好处是代码可读性: private static Bitmap resize(Bitmap image, int maxWidth) { float widthReducePercentage = ((float) maxWidth / image.getWidth()); int scaledHeight = Math.round(image.getHeight() * widthReducePercentage); return Bitmap.createScaledBitmap(image, maxWidth, scaledHeight, true); } 现在,我有第二段代码: private static Bitmap resize(Bitmap image, int maxWidth) { return Bitmap.createScaledBitmap(image, maxWidth, Math.round(image.getHeight() * (float) maxWidth / […]

如何在NDK中获得计算时间

我需要获得我在C中使用NDK / JNI实现的算法的某些部分的计算时间。 我读过这个问题: Android获取当前时间戳? 我想我可以用这种方式使用相同的方法获得JNI调用的计算时间: Long start, end, time; start = System.currentTimeMillis()/1000; //my native call end = System.currentTimeMillis()/1000; time = end – start; Log.i(TAG, “Time … (ms): ” + time); 但是我需要检查本机方法中一些小部件的计算时间。 我该怎么做?