问题标签 [android-strictmode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 是否应该在 UI 线程外访问 SharedPreferences?
随着 Gingerbread 的发布,我一直在尝试一些新的 API,其中之一是StrictMode。
我注意到其中一个警告是 for getSharedPreferences()
。
这是警告:
它是为getSharedPreferences()
在 UI 线程上进行的调用而给出的。
真的应该SharedPreferences
在 UI 线程之外进行访问和更改吗?
android - Gingerbread 模拟器实例比 Froyo 及以下版本慢得多。为什么?
我不确定是否有其他人注意到它,但 Gingerbread 模拟器运行起来就像一条狗,滚动、导航、交互都需要更长的时间并且更不稳定。当我尝试使用它时,我什至在浏览器中遇到了 ANR:http ://www.androidpolice.com/2010/12/06/walkthrough-and-hands-on-with-the-gingerbread-ui-the-new -gingerbread-keyboard-in-all-its-sexiness/(见底部)。
我刚刚在http://android-developers.blogspot.com/2010/12/new-gingerbread-api-strictmode.html阅读了新的 StrictMode以及 Gbread 的所有性能改进,但到目前为止我的经验表明恰好相反。
我们能深入了解这件事吗?在这一点上,我发现自己害怕提出姜饼的实例。
android - 在 Android 上执行文件 I/O - 它属于哪个线程
在阅读了 Brad Fitzpatrick 关于 StrictMode 的文章后,我有几个问题。
文件 I/O 在我的应用程序中属于什么位置?(我知道 UI 线程是错误的,但产生一个新线程会更糟吗?)
如果我应该使用线程进行磁盘访问,那么我的应用程序应该如何处理实现?向 AsyncTask 发送参数?共享变量?我想优化内存使用,不仅是响应能力(特别是因为我的手机没有任何明显的差异)
@Brad 如果您阅读此内容:我喜欢在框架中完成此操作的带有示例(或指向 aosp 源中的位置的链接)的博客文章。
谢谢大家!
android - 使用 StrictMode 在 Android 上检测被遗忘的 SQLite 事务?
执行多个 SQL 语句而不将它们放入一个事务中是一个严重的瓶颈(参见例如http://www.sqlite.org/faq.html#q19)。我还没有彻底检查 SQLite 在 Android 上是如何配置的,但有趣的是,当在更多地方使用事务时,我发现我的应用程序中的性能显着提高。
是否可以检测到使用 StrictMode 忘记使用事务的实例?如果没有,是否可以考虑将其用于 StrictMode 的未来版本?检测起来可能有些棘手,但两种不同的策略可能是,1)事务外的非选择语句,或 2)在短时间内执行的事务外的多个非选择语句。
android - DropBoxManager 用例?
我注意到自 FroYo (API 8) 以来,Android API 中已经引入了DropBoxManager 。
它看起来像是一个替代记录器,不仅可以记录文本,还可以记录文件或字节数组,但我在任何地方都找不到任何关于我们应该如何以及何时使用它的详细文档。
介绍 StrictMode的最新 android dev 博客文章谈到了它,StrictMode 可以将数据附加到 DropBox,并且我们会得到一个 shell 命令来检索这些数据。
请在这里分享您对此的了解!为什么除了通常的 logcat 之外还实现了它?我们可以使用它在应用程序之间共享数据吗?什么样的应用程序使用它?
android - StrictMode 的 DEVELOPER_MODE 定义
我正在焦急地等待 StrictMode 的开源版本,以继续我们的平台开发。Android 博客条目中的示例建议将 StrictMode 调用与
对于 SDK 开发,我希望这个常量由每个应用程序在本地定义。但是,对于平台开发来说,android.util.Config.DEBUG
确定是否开启这个是最好的方法吗?
android - StrictMode 混乱 - 这是怎么回事?
我的问题:
12-18 17:05:03.336: DEBUG/StrictMode(2112): StrictMode 策略违规;~duration=2073 毫秒:android.os.StrictMode$StrictModeDiskReadViolation:策略=23 违规=2
从工厂方法
12-18 17:05:03.336:调试/严格模式(2112):在 android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:299)
然后在我的代码中
12-18 17:05:03.336:调试/严格模式(2112):在 blah.ImageCache.getFromCache(ImageCache.java:248)
12-18 17:05:03.336:调试/严格模式(2112):
在 blah2$LoaderThread$1.handleMessage(blah.java:63)
重要的片段
类 LoaderThread 扩展 HandlerThread {
公共处理程序 mHandler;
public LoaderThread(String name) { super(name); }
@Override public void onLooperPrepared(){ mHandler = new Handler(){ public void handleMessage(Message msg) { Bitmap bit =ImageCache.getInstance().getFromCache((String)msg.obj,ImageCache.USE_DISK); } }; } }
The getFromCache method in the ImageCache class calls
Which seems to be running on the UI thread, but it makes no sense to me. Shouldn't this be getting called on a background thread? This was the goal of using HandlerThread after all...
The LoadThread class is created in my onCreate(bundle) like this
LoaderThread loader = new LoaderThread("imgLoader")
loader.start();
and messages are passed from the UI thread via the handler
loader.mHandler.dispatchMessage(loader.mHandler.obtainMessage(args..));
I'm wondering if this has to do with the getInstance method which is static
public static synchronized ImageCache getInstance() {
if (_instance==null) { _instance = new ImageCache(); } return _instance; }
android - 用于较低平台版本的 StrictMode
我已经开始使用 Android StrictMode,并发现让它在开发过程中始终运行而不仅仅是在我在 git 中创建的特殊分支上运行会很棒。我这样做的原因是我的应用程序要求运行 1.6 及更高版本。
我在 android 开发者博客上读到,您可以设置它,以便通过反射激活它。我只是想知道这实际上会是什么样子,以及是否有可能在此处(或其他地方)记录此内容,而不是让每个想要使用它的人自己解决。
android - Android 的 StrictMode 的生命周期是什么?
我正在尝试尽量减少代码中需要设置 StrictMode 的位置数量。但我不确定我对以下内容是否正确。
Android 的 StrictMode 的文档说您可以将它用于应用程序、活动和其他组件。我已经读到扩展 Application 类是不可取的,而且我不希望扩展 Application 只是为了启用 StrictMode。但我不认为我必须这样做。
您可以使用两种策略:ThreadPolicy(用于线程)和 VmPolicy(用于所有线程)。因此,似乎如果我在一个线程上设置 StrictMode 一次,我从哪里执行此操作并不重要,此后无论是否在 StrictMode 上进行其他调用,都会在该线程上报告违规行为。我只需要在发生我想要检测的违规行为之前从某个地方调用它。并且需要为在我的应用程序中创建的任何新线程进行设置,我还想检查这些线程。
我想我想避免的是调用 build() 方法比我需要的更多。将 StrictMode 放在我所有活动的开头onCreate()
意味着 build() 将在该线程上被多次调用。如果我的应用程序中有一个 Launcher 活动,则在该活动中设置 StrictModeonCreate()
对于应用程序的其余部分应该足够了。真的吗?
其次,如果我的主要活动在应用程序没有死的情况下重新启动,在技术上是否有必要再次调用 StrictMode?还是我的线程仍设置为报告违规行为?我在想围绕 StrictMode 做一个包装类型的类可能有一些价值,如下所示:
这样,在我的主要活动的 onCreate() 中,我可以简单地调用 MyStrictModeSettings.init() 并完成它。它也应该适用于 2.3 之前的 Android 版本。但这可能不值得。布拉德,你在吗?谢谢。
编辑:由于 VmPolicy 适用于所有线程,从技术上讲,我只需要为每个应用程序设置一次,对吗?所以 enableDefaults() 在第二次、第三次等时间调用 VmPolicy 时是在浪费精力吗?再一次,也许它比尝试避免额外的调用更麻烦。
android - Android StrictMode 在哪里实现?
我正在寻找扩展StrictMode API,类似于这个 StackOverflow question中的建议。我看到该 API 在 Honeycomb 中进行了扩展以包含一个 detectCustomSlowMethod() API,这听起来像是可以处理一些扩展情况(尽管我不确定它的作用,因为文档是从磁盘方法复制粘贴的)。
但是,我想扩展 API 以包括额外的硬件访问检测,而这对于 API 是不可能的。因此,我的问题是在哪里可以找到实现 StrictMode API 的代码?