I have target sdk set as 3.2 and min sdk as 2.2, how can I use strictmode in my application, as I understand it is introduced but cannot really understand how to start using it.
6 に答える
StrictMode.ThreadPolicy
は API レベル 9 以降に導入され、デフォルトのスレッド ポリシーは API レベル 11 以降に変更されました。つまり、ネットワーク操作は許可されません。
(例: HttpClient
and HttpUrlConnection
) UI スレッドで実行されます。これを行うと、 が得られNetworkOnMainThreadException
ます。
このエラーは、次の 2 つの方法で簡単に解決できます。
これを解決するための推奨される方法は
anAsyncTask
、ネットワーク リクエストが UI スレッドをブロックしないようにすることです。または、以下のコードをメイン アクティビティの onCreate() メソッドに追加して、このスレッド ポリシーをオーバーライドすることもできます。
if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); }
これがお役に立てば幸いです..
私の提案は 2 つあります。
最初に、ベースラインのStrictMode コードをApplicationのに追加しますonCreate()
。これにより、アプリ全体に StrictMode を簡単に適用できます (ただし、このコードは、より具体的なテストのために任意の場所に置くことができます)。StrictMode のドキュメントに良いサンプル コードがあります。
次に、StrictMode を使用する前に SDK のバージョンを検出します。この方法では、API バージョン 9 以降でのみ StrictMode を使用します。このチェックを行わないと、古いバージョンの Android でアプリがクラッシュします。Build.VERSION.SDK_INTを見ると、SDK のバージョンを簡単に検出できます。
必要に応じて、テスト時に StrictMode のみを有効にすることもできます。これをどのように行うかはあなた次第ですが、私は過去にこれに対する1つの解決策を書きました.
Android マニフェストを次のように設定します。
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" android:maxSdkVersion="16"/>
onCreate メソッドで以下のコードを使用します。
int SDK_INT = android.os.Build.VERSION.SDK_INT;
if (SDK_INT>8){
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
注: Android のどのバージョンがこのコードを使用するかを既に確認しているため、警告を無効にします。
このコードは、Android のバージョンが Android 2.2 以降の場合に有効になります。
これは、アプリで StrictMode を使用する方法に非常に役立ちますか? これを確認してください.. http://mobile.tutsplus.com/tutorials/android/android-sdk_strictmode/
APIレベルを確認してから厳格モードを実行することで、問題の解決に役立ちました。
使い方は以下のリンクを参照してください。関連するコンポーネントまたはアプリケーションの onCreate に設定します