我只想使用StrictMode.noteSlowCall。 我不知道该怎么办。开发者网站/ androidxref没有足够的解释。
以下是我的代码。
@Override
public void onCreate() {
StrictMode.ThreadPolicy.Builder builder = new StrictMode.ThreadPolicy.Builder();
builder.detectCustomSlowCalls();
builder.penaltyLog();
builder.penaltyDropBox();
builder.penaltyDialog();
builder.penaltyFlashScreen();
StrictMode.setThreadPolicy(builder.build());
下面是其他文件...
public static BigInteger computeRecursivelyWithCache(int n)
{
StrictMode.noteSlowCall("jheeTest CustomSlowCall");
SparseArray<BigInteger> cache = new SparseArray<BigInteger>();
return computeRecursivelyWithCache(n);
}
OnClickListener mAboutKeyboardImageOnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
computeRecursivelyWithCache(5);
我试过这些代码。但它根本不起作用。即使我按下按钮,它也不会出现在日志文件或Dropbox上。 你能告诉我这是什么问题吗?
答案 0 :(得分:1)
从文档中,
StrictMode是一个开发人员工具,它可以检测到您可能偶然执行的操作并引起您的注意,以便您进行修复。
使用此StrictMode,您还可以检测到缓慢的方法调用。
StrictMode.noteSlowCall("jheeTest CustomSlowCall");
当您说“ StrictMode.noteSlowCall”时,您正在设置一个策略,告诉系统在方法执行缓慢时通知您。如何通知取决于您设置的“惩罚”。
在这里,“ jheeTest CustomSlowCall”是一个TAG / msg,可让您标识发生冲突的位置。
在运行应用程序时,当发生违反策略的情况(在此特定策略中,StrictMode检测到您的一种方法执行缓慢)时,如果您已给定刑罚Log(),您将在logcat中看到一条日志。
我在一个应用中模拟了一个缓慢的方法调用,并使用了标记“ Slow_Call_Method_1”
11-30 15:11:38.574 16892-16892/com.PackageName D/StrictMode: StrictMode policy violation; ~duration=251 ms: android.os.StrictMode$StrictModeCustomViolation: policy=65551 violation=8 msg=Slow_Call_Method_1
at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1397)
at android.os.StrictMode.noteSlowCall(StrictMode.java:2340)
at com.PackageName.TinyDBHelper.init(TinyDBHelper.java:41)
at com.PackageName.MyApplication.onCreate(MyApplication.java:77)
查看消息。
StrictMode策略违反; 〜duration = 251毫秒:android.os.StrictMode $ StrictModeCustomViolation:策略= 65551违规= 8 msg = Slow_Call_Method_1
如果添加了许多要跟踪的方法,则msg可帮助您确定导致策略违规的方法。就我而言,我将TAG设置为“ Slow_Call_Method_1”的方法就是违反该政策的方法
要回答您的问题,
即使按下按钮,它也不会出现在日志文件或保管箱中。
由于系统dint检测到它是一个慢速调用,因此dint出现在日志文件上-意味着dint方法运行得足够慢,以致于违规失败
答案 1 :(得分:0)
确保没有在Application.onCreate中而是在Activity.onCreate中设置所有这些StrictMode内容。因为有一个bug。
但是总的来说,您的代码是正确的。您可以使用detectCustomSlowCalls掩码构建策略。然后,通过调用StrictMode.noteSlowCall标记慢速(繁重)方法。 当您的应用程序尝试在UI线程中调用此慢速方法时,您将对此有所了解。
这件事可以帮助您确保不要在UI线程中调用慢速方法。