問題タブ [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 - SharedPreferencesへのアクセスはUIスレッドから行う必要がありますか?
Gingerbreadのリリースに伴い、私はいくつかの新しいAPIを試してきましたが、そのうちの1つはStrictModeです。
警告の1つがのためのものであることに気づきました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 のすべてのパフォーマンスの改善について読んだところですが、これまでの私の経験ではただ反対。
この問題の真相を突き止めることはできますか? この時点で、Gingerbread のインスタンスを立ち上げるのが怖いと思います。
android - Android でのファイル I/O の実行 - どのスレッドに属しているか
StrictModeに関するBrad Fitzpatrick の記事を読んだ後、いくつかの疑問が残ります。
ファイル I/O はアプリケーションのどこに属しますか? (UI スレッドが間違っていることはわかっていますが、新しいスレッドを生成するとさらに悪化する可能性がありますか?)
ディスク アクセスを行うためにスレッドを使用する必要がある場合、アプリケーションはどのように実装を処理する必要がありますか? パラメータを AsyncTask に送信しますか? 共有変数?応答性だけでなく、メモリ使用量も最適化したい(特に、私の電話では目立った違いがないため)
これを読んでいる場合は@Brad:これがフレームワークで行われたサンプル(またはaospソース内の場所へのリンク)を含むブログ投稿が大好きです。
みんな、ありがとう!
android - StrictModeを使用してAndroidで忘れられたSQLiteトランザクションを検出しますか?
1 つのトランザクションにまとめずに複数の SQL ステートメントを実行すると、重大なボトルネックになります (例: http://www.sqlite.org/faq.html#q19を参照)。Android で SQLite がどのように構成されているかを十分に確認したことはありませんが、より多くの場所でトランザクションを使用すると、アプリ内でパフォーマンスが劇的に向上することに気付いたという逸話があります。
StrictMode を使用してトランザクションを使用するのを忘れたインスタンスを検出することは可能ですか? そうでない場合、StrictMode の将来のリリースでそれを検討できますか? 検出するのはやや難しいかもしれませんが、1) トランザクション外の非選択ステートメント、または 2) 短期間に実行されたトランザクション外の複数の非選択ステートメントの 2 つの異なる戦略が考えられます。
android - DropBoxManagerのユースケース?
FroYo(API 8)以降、AndroidAPIにDropBoxManagerが導入されていることに気づきました。
テキストだけでなくファイルやバイト配列もログに記録できる代替ロガーのように見えますが、それをいつどのように使用すべきかについての詳細なドキュメントはどこにも見つかりませんでした。
StrictModeを紹介する最新のandroiddevブログ投稿では、StrictModeがDropBoxにデータを追加でき、これらのデータを取得するためのシェルコマンドが提供されています。
これについてのあなたの知識をここで共有してください!通常の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 ms:android.os.StrictMode $ StrictModeDiskReadViolation:policy=23違反=2
ファクトリメソッドから
12-18 17:05:03.336:DEBUG / StrictMode(2112):android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:299)
それから私のコードで
12-18 17:05:03.336:DEBUG / StrictMode(2112):blah.ImageCache.getFromCache(ImageCache.java:248)
12-18 17:05:03.336:DEBUG / StrictMode(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); }}; }}
ImageCacheクラスのgetFromCacheメソッドは
これはUIスレッドで実行されているようですが、私には意味がありません。これはバックグラウンドスレッドで呼び出されるべきではありませんか?結局、これがHandlerThreadを使用する目的でした...
LoadThreadクラスはこのように私のonCreate(bundle)で作成されます
LoaderThread loader = new LoaderThread( "imgLoader")
loader.start();
メッセージはUIスレッドからハンドラーを介して渡されます
loader.mHandler.dispatchMessage(loader.mHandler.obtainMessage(args ..));
これは静的なgetInstanceメソッドと関係があるのだろうかと思います
パブリック静的同期ImageCachegetInstance(){
if(_instance == null){_instance = new ImageCache(); } return _instance; }
android - 下位プラットフォーム バージョンの StrictMode
私は Android StrictMode の使用を開始しましたが、git で作成した特別なブランチだけでなく、開発中に常に実行することができれば素晴らしいと思います。私がこれを行った理由は、1.6 以降で実行するためのアプリの要件です。
リフレクションを介してアクティブ化するように設定できることを、Android開発者ブログで読みました。私はそれが実際にどのように見えるのか、また、それを使用したいすべての人に自分で解決してもらうのではなく、ここ (または他の場所) に文書化することが可能かどうか疑問に思っていました.
android - Android の StrictMode のライフサイクルはどのようなものですか?
StrictMode をセットアップする必要があるコード内の場所の数を最小限に抑えようとしています。しかし、次のことについて、私が正しいかどうかはわかりません。
Android の StrictMode のドキュメントには、アプリケーション、アクティビティ、およびその他のコンポーネントに使用できると記載されています。Application クラスを拡張することは望ましくないことを読みましたが、StrictMode を有効にするためだけに Application を拡張したくないと考えています。しかし、私はそうする必要はないと思います。
使用できるポリシーは 2 つあります。ThreadPolicy (スレッド用) と VmPolicy (すべてのスレッド用) です。そのため、スレッドで StrictMode を一度セットアップすると、どこからそれを行うかは問題ではなく、その後、他の呼び出しに関係なく、または StrictMode に関係なく、そのスレッドで違反が報告されるように思われます。検出したい違反が発生する前に、どこかから呼び出す必要があります。また、自分のアプリケーションで作成された、チェックしたい新しいスレッド用にセットアップする必要があります。
私が避けたいと思うのは、必要以上に build() メソッドを呼び出すことです。すべてのアクティビティの先頭に StrictMode を配置するonCreate()
と、そのスレッドで build() が複数回呼び出されることになります。アプリケーションに Launcher アクティビティが 1 つある場合、そのアクティビティで StrictMode を設定するだけでonCreate()
、アプリケーションの残りの部分で十分なはずです。本当?
第 2 に、アプリケーションが終了していなくてもメイン アクティビティが再開された場合、技術的に StrictMode を再度呼び出す必要がありますか? それとも、私のスレッドはまだ違反を報告するように設定されていますか? 次のように、StrictMode の周りにラッパー型のクラスを作成することに価値があるのではないかと考えていました。
そうすれば、メイン アクティビティの onCreate() で、MyStrictModeSettings.init() を呼び出すだけで完了できます。Android 2.3 より前のバージョンでも動作するはずです。しかし、それは価値がないかもしれません。ブラッド、そこにいる?ありがとう。
編集: VmPolicy はすべてのスレッド用であるため、技術的には、アプリケーションごとに 1 回だけ設定する必要がありますよね? enableDefaults() は、2 回目、3 回目などに呼び出されたときに VmPolicy をやり直すのに無駄な労力を費やしていますか? 繰り返しますが、余分な呼び出しを避けることは、価値があるよりも面倒なことかもしれません。
android - Android StrictMode はどこに実装されていますか?
この StackOverflow questionで提案されているものと同様に、 StrictMode APIを拡張しようとしています。Honeycomb で API が拡張され、detectCustomSlowMethod() API が含まれていることがわかりました。これは、いくつかの拡張ケースを処理できるように思えます (ただし、ドキュメントはディスク メソッドからコピー アンド ペーストされているため、それが何をするかはわかりません)。
ただし、API を拡張して追加のハードウェア アクセス検出を含めたいと考えていますが、これは API では不可能です。したがって、私の質問は、StrictMode API を実装するコードはどこにありますか?