相关疑难解决方法(0)

旋转完全空活动时StrictMode活动实例计数违规(2个实例,1个预期)

相关的只是因为它促使从严格模式中消除任何误报,因为任何人的继续存在使死刑变得不切实际

在过去的几天里,我一直在追逐并修复应用程序中的内存泄漏.在达到我认为已经修复它们的点之后,我实现了一个类似于Android StrictMode和堆转储中描述的失败响应机制(启用实例跟踪并判处死刑,拦截关闭错误消息,转储堆,发送应用程序启动时的遇险信号).当然,所有这些只是在调试版本中.

到了这一点

相信我已经修复了所有活动泄漏,某些活动仍会导致屏幕旋转时出现严格的模式实例违规警告.奇怪的是,只有一些,而不是所有应用程序的活动都这样做.

我已经审查了发生此类违规时所采取的堆转储,并检查了相关活动的代码以查找泄漏,但没有得到任何结果.

所以在这一点上,我试图做出尽可能小的测试用例.我创建了一个完全空白的活动(甚至没有布局),看起来像这样:

package com.example.app;

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

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        StrictMode.setVmPolicy(
                new StrictMode.VmPolicy.Builder()
                        .detectAll()
                        .penaltyLog()
                        .build());
        StrictMode.setThreadPolicy(
                new StrictMode.ThreadPolicy.Builder()
                        .detectAll()
                        .penaltyDeath()
                        .penaltyLog()
                        .build());
        super.onCreate(savedInstanceState);
    }

}
Run Code Online (Sandbox Code Playgroud)

为了完整,清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app" >

    <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.app.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

我打开活动(设备持有肖像).我旋转到横向,然后回到肖像,此时我在LogCat中从StrictMode看到:

01-15 17:24:23.248:E/StrictMode(13867):class com.example.app.MainActivity; 实例= 2; …

java android memory-leaks android-activity

34
推荐指数
1
解决办法
9828
查看次数

适用于较低平台版本的StrictMode

我已经开始使用Android StrictMode,并发现在开发期间始终运行它并不仅仅是我在git中创建的特殊分支上会很棒.我这样做的原因是我的应用程序要求以1.6及更高版本运行.

我在Android开发者博客上看到你可以设置它,以便通过反射激活它.我只是想知道它实际上是什么样的,如果有可能在这里(或其他地方)记录这些,而不是让所有想要使用它的人自己解决.

android android-strictmode

12
推荐指数
3
解决办法
8265
查看次数