标签: android-strictmode

Android Kotlin协程在严格模式下崩溃

我在下面创建了一个非常简化的版本。
严格模式通过以下策略设置:

   StrictMode.setThreadPolicy(
            StrictMode.ThreadPolicy.Builder()
                .detectDiskReads()
                .detectDiskWrites()
                .detectNetwork()   // or .detectAll() for all detectable problems
                .penaltyLog()
                .penaltyDeath()
                .build()
        )
Run Code Online (Sandbox Code Playgroud)

视图模型只有一个函数,该函数在调用时会使应用程序崩溃。该函数不执行任何操作(其主体为空)

class MyViewModel : ViewModel() {
    fun foo() {
        viewModelScope.launch(Dispatchers.IO){  }
    }
}
Run Code Online (Sandbox Code Playgroud)

该活动通过以下跟踪viewModel.foo()onCreate其中调用使应用程序崩溃。

   --------- beginning of crash
2019-04-08 22:07:49.579 1471-1471/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 1471
    java.lang.RuntimeException: StrictMode ThreadPolicy violation
        at android.os.StrictMode$AndroidBlockGuardPolicy.onThreadPolicyViolation(StrictMode.java:1705)
        at android.os.StrictMode$AndroidBlockGuardPolicy.lambda$handleViolationWithTimingAttempt$0(StrictMode.java:1619)
        at android.os.-$$Lambda$StrictMode$AndroidBlockGuardPolicy$9nBulCQKaMajrWr41SB7f7YRT1I.run(Unknown Source:6)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: android.os.strictmode.DiskReadViolation …
Run Code Online (Sandbox Code Playgroud)

android android-strictmode kotlin-coroutines

6
推荐指数
1
解决办法
643
查看次数

StrictMode 政策违规:我的应用程序中的 android.os.strictmode.LeakedClosableViolation?

Android 开发新手并第一次在我的应用程序上尝试 StrictMode。我注意到以下内容,并想知道这是否是我的应用程序或库中的问题 - 我不太清楚。

谢谢!

D/StrictMode: StrictMode policy violation: android.os.strictmode.LeakedClosableViolation: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks. Callsite: readFromParcel
    at android.os.StrictMode$AndroidCloseGuardReporter.report(StrictMode.java:1929)
    at dalvik.system.CloseGuard.warnIfOpen(CloseGuard.java:305)
    at android.view.SurfaceControl.finalize(SurfaceControl.java:1104)
    at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:291)
    at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:278)
    at java.lang.Daemons$Daemon.run(Daemons.java:139)
    at java.lang.Thread.run(Thread.java:923)
Run Code Online (Sandbox Code Playgroud)

android android-strictmode

6
推荐指数
0
解决办法
967
查看次数

我可以从这个严格模式 LeakedClosableViolation 消息中获取更多信息吗?

我刚刚在 Android 应用程序的日志中看到一条非常奇怪的消息:

W/系统:资源无法调用关闭。

因此,我打开了严格模式的“detectLeakedClosableObjects”,但我得到了一个堆栈跟踪,但我无法真正了解它,因为它不包含有关我的应用程序的任何内容。见下文。

我想知道是否有任何方法可以获得更多关于为什么会发生这种情况的信息?它可能在我的应用程序之外吗?指针赞赏:

D/StrictMode:StrictMode 策略违规:android.os.strictmode.LeakedClosableViolation:在附加的堆栈跟踪中获取了资源,但从未释放。有关避免资源泄漏的信息,请参阅 java.io.Closeable。调用站点:在 android.os.StrictMode$AndroidCloseGuardReporter.report(StrictMode.java:1992) 处关闭,在 dalvik.system.CloseGuard.warnIfOpen(CloseGuard.java:347) 处,在 sun.nio.fs.UnixSecureDirectoryStream.finalize(UnixSecureDirectoryStream.java:第580章:139)在java.lang.Thread.run(Thread.java:920)

android android-strictmode

6
推荐指数
0
解决办法
453
查看次数

使用StrictMode检测Android上被遗忘的SQLite事务?

执行多个SQL语句而不将它们放入一个事务中是一个严重的瓶颈(参见例如http://www.sqlite.org/faq.html#q19).我还没有彻底检查过如何在Android上配置SQLite,但有趣的是,当我在更多地方使用交易时,我认为我的应用程序内的性能会有显着提升.

是否有可能检测到使用StrictMode忘记使用事务的实例?如果没有,是否可以考虑将来的StrictMode版本?检测可能有些棘手,但两种不同的策略可能是:1)事务外的非选择语句,或2)在短时间内执行的事务外的多个非选择语句.

sqlite android android-strictmode

5
推荐指数
1
解决办法
729
查看次数

严格模式违规列表

在shell中运行adb logcat我看到这样的东西

StrictMode policy violation; ~duration=337 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=2

  1. 政策= 23意味着什么?
  2. 什么是违规= 2?

我正在寻找这些值的含义,但我找不到任何文档违反和政策列表,或者我可能以错误的方式解释了我的搜索结果,但我会很感激对此的一些解释

android strict-mode android-strictmode

5
推荐指数
1
解决办法
7954
查看次数

Android StrictMode和堆转储

当Android的StrictMode检测到泄露的对象(例如活动)违规时,如果我能够在那个时刻捕获堆转储将会很有帮助.但是,没有明显的方法来配置它来执行此操作.有没有人知道可以用来实现它的一些技巧,例如说服系统在死刑被调用之前运行一段特定代码的方法?我不认为StrictMode会抛出异常,所以我不能使用这里描述的技巧:有没有办法让Android进程在OutOfMemoryError上产生堆转储?

android android-strictmode

5
推荐指数
1
解决办法
2044
查看次数

严格模式ViewActivity;实例=2;极限=1

我的 FragmentActivity 上有一个 Gridview,其中包含 Fragment 中的图像。

Gridview onItemClick 我调用 Activity

Intent intent = new Intent(getSherlockActivity(), ViewActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                intent.putExtra("PREVIEW_IMG_ID", imagesIDs.get(pos));
                startActivity(intent);  
Run Code Online (Sandbox Code Playgroud)

在第一次 ViewActivity 回压时,一切似乎正常,但第二次单击 Gridview onItemClick 时,当我设置严格模式时,ViewActivity 回压返回错误:

StrictMode ViewActivity; instances=2; limit=1 and app died.
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我可以防止错误或只是忽略吗?

查看活动

import android.app.Activity;
import android.os.Bundle;

import com.bugexplorer.wallpapers.R;

public class ViewActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view);

    }     

}
Run Code Online (Sandbox Code Playgroud)

android android-activity android-strictmode

5
推荐指数
0
解决办法
4209
查看次数

ParcelFileDescriptor 泄漏发生在哪里?

我已经按照数据备份指南实现了BackupAgent。代码的行为符合预期,直到设置为检测泄漏的可关闭对象。执行备份并发生 GC 后,CloseGuard 报告泄漏并显示以下堆栈跟踪:StrictMode.VmPolicyParcelFileDescriptor

\n\n
06-28 21:47:39.683  25072-25081/com.qbix.nub E/StrictMode\xef\xb9\x95 A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.\n    java.lang.Throwable: Explicit termination method \'close\' not called\n            at dalvik.system.CloseGuard.open(CloseGuard.java:184)\n            at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:179)\n            at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:905)\n            at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:897)\n            at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:64)\n            at android.os.Binder.execTransact(Binder.java:404)\n            at dalvik.system.NativeStart.run(Native Method)\n06-28 21:47:39.683  25072-25081/com.qbix.nub W/System.err\xef\xb9\x95 StrictMode VmPolicy violation with POLICY_DEATH; shutting down.\n06-28 21:47:39.683  25072-25081/com.qbix.nub I/Process\xef\xb9\x95 Sending signal. PID: 25072 SIG: 9\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了确认我没有泄漏ParcelFileDescriptor我的BackupAgent …

android android-backup-service android-strictmode

5
推荐指数
0
解决办法
560
查看次数

Adview loadAd() 触发 StrictMode 违规

我正在尝试在我的应用程序中添加一些添加项。当我启用 StrictMode 时,我会收到一堆这样的策略违规(可能是其中的 6 或 7 个)。这是正常的吗?

18817-18817/com.xyz.xyz.xyz D/StrictMode: StrictMode policy violation; ~duration=67937 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=5439503 violation=2
                                                   at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1263)
                                                   at libcore.io.BlockGuardOs.fstat(BlockGuardOs.java:132)
                                                   at java.io.RandomAccessFile.length(RandomAccessFile.java:240)
                                                   at java.util.zip.ZipFile.readCentralDir(ZipFile.java:386)
                                                   at java.util.zip.ZipFile.<init>(ZipFile.java:175)
                                                   at java.util.zip.ZipFile.<init>(ZipFile.java:142)
                                                   at android.webkit.WebViewFactory.getLoadFromApkPath(WebViewFactory.java:357)
                                                   at android.webkit.WebViewFactory.getWebViewNativeLibraryPaths(WebViewFactory.java:407)
                                                   at android.webkit.WebViewFactory.loadNativeLibrary(WebViewFactory.java:511)
                                                   at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:188)
                                                   at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:158)
                                                   at android.webkit.WebSettings.getDefaultUserAgent(WebSettings.java:1239)
                                                   at com.google.android.gms.ads.internal.util.ai.a(:com.google.android.gms.DynamiteModulesA:414)
                                                   at com.google.android.gms.ads.internal.util.y.a(:com.google.android.gms.DynamiteModulesA:419)
                                                   at com.google.android.gms.ads.internal.state.h.a(:com.google.android.gms.DynamiteModulesA:349)
                                                   at com.google.android.gms.ads.internal.a.<init>(:com.google.android.gms.DynamiteModulesA:153)
                                                   at com.google.android.gms.ads.internal.c.<init>(:com.google.android.gms.DynamiteModulesA:104)
                                                   at com.google.android.gms.ads.internal.c.<init>(:com.google.android.gms.DynamiteModulesA:92)
                                                   at com.google.android.gms.ads.internal.g.<init>(:com.google.android.gms.DynamiteModulesA:55)
                                                   at com.google.android.gms.ads.internal.o.<init>(:com.google.android.gms.DynamiteModulesA:89)
                                                   at com.google.android.gms.ads.ChimeraAdManagerCreatorImpl.newAdManagerByType(:com.google.android.gms.DynamiteModulesA:66)
                                                   at com.google.android.gms.ads.internal.client.al.onTransact(:com.google.android.gms.DynamiteModulesA:91)
                                                   at android.os.Binder.transact(Binder.java:387)
                                                   at com.google.android.gms.ads.internal.client.am.newAdManagerByType(:com.google.android.gms:170)
                                                   at com.google.android.gms.ads.AdManagerCreatorImpl.newAdManagerByType(:com.google.android.gms:90)
                                                   at com.google.android.gms.ads.internal.client.al.onTransact(:com.google.android.gms:91)
                                                   at android.os.Binder.transact(Binder.java:387)
                                                   at com.google.android.gms.ads.internal.client.zzv$zza$zza.zza(Unknown Source)
                                                   at com.google.android.gms.ads.internal.client.zze.zza(Unknown Source)
                                                   at com.google.android.gms.ads.internal.client.zzl$1.zzim(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

android adview android-strictmode

5
推荐指数
1
解决办法
696
查看次数

StrictMode java.lang.Throwable:使用AdMob检测到未标记的套接字

将StrictMode与AdMob结合使用时,出现以下异常:

java.lang.Throwable: Untagged socket detected; use TrafficStats.setThreadSocketTag() to track all network usage
    at android.os.StrictMode.onUntaggedSocket(StrictMode.java:2012)
    at com.android.server.NetworkManagementSocketTagger.tag(NetworkManagementSocketTagger.java:78)
    at libcore.io.BlockGuardOs.tagSocket(BlockGuardOs.java:47)
    at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:310)
    at libcore.io.IoBridge.socket(IoBridge.java:667)
    at java.net.PlainSocketImpl.socketCreate(PlainSocketImpl.java:116)
    at java.net.AbstractPlainSocketImpl.create(AbstractPlainSocketImpl.java:98)
    at java.net.Socket.createImpl(Socket.java:484)
    at java.net.Socket.getImpl(Socket.java:547)
    at java.net.Socket.setSoTimeout(Socket.java:1175)
    at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:139)
    at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
    at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
    at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
    at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
    at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
    at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(Unknown Source:0)
    at com.google.android.gms.internal.zzabh.zza(Unknown Source:152)
    at com.google.android.gms.internal.zzabh.zza(Unknown Source:788)
    at com.google.android.gms.internal.zzabh.zzb(Unknown Source:4)
    at com.google.android.gms.internal.zzabj.run(Unknown Source:5)
    at com.google.android.gms.internal.zzagn.call(Unknown Source:2)
    at com.google.android.gms.internal.zzago.run(Unknown Source:9)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at …
Run Code Online (Sandbox Code Playgroud)

android admob android-strictmode

5
推荐指数
0
解决办法
1377
查看次数