我StrictMode.ThreadPolicy.Builder
从android文档StrictMode.ThreadPolicy.Builder引用。
我没有明确的想法StrictMode.ThreadPolicy.Builder
。
当我们必须使用此类时StrictMode.ThreadPolicy.Builder
。
有什么优势和目的StrictMode.ThreadPolicy.Builder
。
我想要详细的解释
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.build();
StrictMode.setThreadPolicy(policy);
Run Code Online (Sandbox Code Playgroud)
在应用程序中定义严格模式策略的优点是,在开发阶段迫使您使应用程序在运行设备上表现得更好:避免在UI线程上运行消耗操作,避免活动泄漏,等等。 。在代码中定义这些规则时,如果已定义的严格策略遭到破坏,就会使应用程序崩溃,这使您可以修复已解决的问题(行为不佳的方法,例如UI线程上的网络操作)。
当我开始一个新项目时,我喜欢先做以下事情:
public class MyApplication extends Application {
private static final String TAG = "MyApplication";
@Override
public void onCreate() {
if (BuildConfig.DEBUG) {
Log.w(TAG, "======================================================");
Log.w(TAG, "======= APPLICATION IN STRICT MODE - DEBUGGING =======");
Log.w(TAG, "======================================================");
/**
* Doesn't enable anything on the main thread that related
* to resource access.
*/
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyFlashScreen()
.penaltyDeath()
.build());
/**
* Doesn't enable any leakage of the application's components.
*/
final StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
builder.detectLeakedRegistrationObjects();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
builder.detectFileUriExposure();
}
builder.detectLeakedClosableObjects()
.detectLeakedSqlLiteObjects()
.penaltyLog()
.penaltyDeath();
StrictMode.setVmPolicy(builder.build());
}
super.onCreate();
}
Run Code Online (Sandbox Code Playgroud)
}
并在应用程序标签下设置AndroidManifest.xml,如下所示:
android:debugable="true"
Run Code Online (Sandbox Code Playgroud)
下面,我向您展示了仅当我的应用程序处于调试模式时,才对它强制使用Strictmode策略(清单中的标志必须在发布之前删除)。
希望能帮助到你。
归档时间: |
|
查看次数: |
8005 次 |
最近记录: |