有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java应用程序在调用App onCreate()之前运行到ANR

我在一个项目上工作了很长时间。 最近,我在应用程序启动时出现了一个ANR问题。 事实上,由于从未调用App.onCreate()方法,因此应用程序甚至没有启动。据我所知,在此之前唯一调用的是任何ContentProvideronCreate()方法。所以我从清单文件中删除了它们,但问题仍然存在。应用程序onCreate仍然没有调用

这里有一些额外的细节:

清单文件:

<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    package="com.somepackagename">

    <uses-permission 安卓:name="安卓.permission.INTERNET" />
    <uses-permission 安卓:name="安卓.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission 安卓:name="安卓.permission.ACCESS_FINE_LOCATION" />
    <uses-permission 安卓:name="安卓.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission 安卓:name="安卓.permission.RECORD_AUDIO" />
    <uses-permission 安卓:name="安卓.permission.CAMERA" />

    <uses-feature
        安卓:name="安卓.hardware.camera"
        安卓:required="true" />
    <uses-feature
        安卓:glEsVersion="0x00020000"
        安卓:required="true"/>

    <application
        安卓:name=".App"
        安卓:allowBackup="true"
        安卓:icon="@mipmap/ic_launcher"
        安卓:label="@string/app_name"
        安卓:supportsRtl="true"
        安卓:theme="@style/AppTheme">
        <meta-data
            安卓:name="com.facebook.sdk.ApplicationId"
            安卓:value="@string/facebook_app_id" />
        <meta-data
            安卓:name="io.fabric.ApiKey"
            安卓:value="a_very_long_secret_key" />
        <meta-data
            安卓:name="com.google.安卓.geo.API_KEY"
            安卓:value="another_secret_key" />

        <meta-data
            安卓:name="com.google.firebase.messaging.default_notification_icon"
            安卓:resource="@mipmap/ic_launcher" />

        <meta-data
            安卓:name="com.google.firebase.messaging.default_notification_color"
            安卓:resource="@color/colorPrimary" />

        <activity
            安卓:name=".activities.SplashActivity"
            安卓:configChanges="keyboardHidden|orientation"
            安卓:label="@string/app_name"
            安卓:screenOrientation="portrait">

            <intent-filter>
                <action 安卓:name="安卓.intent.action.MAIN" />
                <category 安卓:name="安卓.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter 安卓:autoVerify="true">
                <action 安卓:name="安卓.intent.action.VIEW" />

                <category 安卓:name="安卓.intent.category.DEFAULT" />
                <category 安卓:name="安卓.intent.category.BROWSABLE" />

                <data
                    安卓:host="@string/deep_link_host"
                    安卓:scheme="https" />
            </intent-filter>
        </activity>
        <activity
            安卓:name=".activities.MainActivity"
            安卓:screenOrientation="portrait">
        </activity>
        <activity
            安卓:name=".activities.MessageCreationEditActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.SignInSignUpActivity"
            安卓:screenOrientation="portrait"
            安卓:windowSoftInputMode="adjustResize"/>
        <activity
            安卓:name=".activities.SettingsActivity"
            安卓:screenOrientation="portrait"/>
        <activity
            安卓:name=".activities.MediaViewer"
            安卓:configChanges="orientation|screenSize"/>
        <activity
            安卓:name=".activities.CreateGroupActivity"
            安卓:screenOrientation="portrait"
            安卓:windowSoftInputMode="adjustPan" />
        <activity
            安卓:name=".activities.CategoriesActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.ExploreActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.AllMembersActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.InviteMembersActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.QrCodeActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.GroupSettingsActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.SliceCreationEditActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.FavoritesMessagesActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.QrCodeScannerActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.UserDetailsActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.MembershipActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.GroupDetailsActivity"
            安卓:screenOrientation="portrait"/>
        <activity
            安卓:name=".activities.MemberManagementActivity"
            安卓:screenOrientation="portrait" />
        <activity
            安卓:name=".activities.ReportActivity"
            安卓:screenOrientation="portrait" />
        <activity 安卓:name=".activities.ShareMessageActivity"
            安卓:screenOrientation="portrait"/>
        <activity
            安卓:name=".activities.WebViewActivity"
            安卓:label="@string/title_activity_web_view"
            安卓:theme="@style/AppTheme"/>
        <activity 安卓:name=".activities.ContentRatingActivity"
            安卓:screenOrientation="portrait"/>
        <activity
            安卓:name="com.facebook.FacebookActivity"
            安卓:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            安卓:label="@string/app_name" />
        <activity
            安卓:name="com.facebook.CustomTabActivity"
            安卓:exported="true">
            <intent-filter>
                <action 安卓:name="安卓.intent.action.VIEW" />

                <category 安卓:name="安卓.intent.category.DEFAULT" />
                <category 安卓:name="安卓.intent.category.BROWSABLE" />

                <data 安卓:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>

        <!--
        <provider
            安卓:name=".AssetContentProvider"
            安卓:authorities="${packageName}.AssetContentProvider"
            安卓:exported="false"
            安卓:multiprocess="false"/>
        <provider
            安卓:name="com.facebook.FacebookContentProvider"
            安卓:authorities="com.facebook.app.FacebookContentProvider547123654789621"
            安卓:exported="true" />
        <provider
            安卓:name="安卓.support.v4.content.FileProvider"
            安卓:authorities="${packageName}.provider"
            安卓:exported="false"
            安卓:multiprocess="true"
            安卓:grantUriPermissions="true">
            <meta-data
                安卓:name="安卓.support.FILE_PROVIDER_PATHS"
                安卓:resource="@xml/file_paths" />
        </provider> -->

        <service 安卓:name=".services.FCMIDService">
            <intent-filter>
                <action 安卓:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>
        <service 安卓:name=".services.FCMService">
            <intent-filter>
                <action 安卓:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
    </application>

</manifest>

应用程序梯度文件:

apply plugin: 'com.安卓.application'
apply plugin: 'io.fabric'

安卓 {
   compileSdkVersion 27
   buildToolsVersion "27.0.3"

defaultConfig {
    applicationId "com.somepackagename"
    minSdkVersion 17
    targetSdkVersion 27
    renderscriptTargetApi 22
    renderscriptSupportModeEnabled true
    versionCode 34
    versionName "1.0.34"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-安卓.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    api fileTree(dir: 'libs', include: ['*.jar'])

    api group: 'commons-lang', name: 'commons-lang', version: '2.6'
    api 'com.安卓.support:multidex:1.0.1'
    api 'com.安卓.support:cardview-v7:27.1.1'
    api 'com.安卓.support:percent:27.1.1'
    api 'com.安卓.support.constraint:constraint-layout:1.0.2'
    api 'com.安卓.support:appcompat-v7:27.1.1'
    api 'com.mikhaellopez:circularimageview:3.0.2'
    api 'com.安卓.support:design:27.1.1'
    api 'fr.tvbarthel.blurdialogfragment:lib:2.2.0'
    api 'com.github.channguyen:rsv:1.0.1'
    api 'com.squareup.retrofit2:retrofit:2.1.0'
    api 'com.squareup.retrofit2:converter-gson:2.1.0'
    api 'net.danlew:安卓.joda:2.9.4.3'
    //implementation 'com.facebook.安卓:facebook-安卓-sdk:4.17.0'
    implementation 'com.facebook.安卓:facebook-安卓-sdk:[4,5)'
    api 'com.google.zxing:core:3.3.0'
    api 'com.google.安卓.gms:play-services-maps:11.0.2'
    api 'com.google.安卓.gms:play-services-ads:11.0.2'
    api 'com.google.安卓.gms:play-services-auth:11.0.2'
    api 'com.google.firebase:firebase-ads:11.0.2'
    api 'com.google.firebase:firebase-messaging:11.0.2'
    api 'com.google.firebase:firebase-core:11.0.2'
    api 'com.google.firebase:firebase-invites:11.0.2'
    api 'com.nvanbenschoten.motion:library:1.1.2'
    api 'com.google.ads.interactivemedia.v3:interactivemedia:3.7.2'
    api('com.crashlytics.sdk.安卓:crashlytics:2.7.1@aar') {
        transitive = true;
    }
    api('com.twitter.sdk.安卓:twitter-core:2.3.0@aar') {
        transitive = true;
    }
    api('com.twitter.sdk.安卓:tweet-composer:2.2.0@aar') {
        transitive = true;
    }
    api 'com.drewnoakes:metadata-extractor:2.11.0'
}

apply plugin: 'com.google.gms.google-services'

如果您有任何建议或想法,我将不胜感激。 谢谢

编辑 以下是ANR的一些附加信息和日志:

09-04 10:10:31.360 772-791/? E/ActivityManager: ANR in com.somepackagename
PID: 18073
Reason: executing service com.somepackagename/.services.FCMIDService
Load: 8.05 / 8.37 / 8.36
CPU usage from 26127ms to 0ms ago (2018-09-04 10:10:01.774 to 2018-09-04 10:10:27.901):
  3.4% 772/system_server: 2.2% user + 1.2% kernel / faults: 658 minor
  0.5% 599/media.codec: 0.3% user + 0.1% kernel / faults: 407 minor
  0.8% 434/surfaceflinger: 0.4% user + 0.3% kernel / faults: 10 minor
  0.6% 3942/com.google.安卓.gms.persistent: 0.4% user + 0.1% kernel / faults: 239 minor
  0.5% 2323/com.安卓.phone: 0.2% user + 0.3% kernel / faults: 5 minor
  0.4% 21381/adbd: 0.1% user + 0.3% kernel / faults: 421 minor
  0.1% 593/media.extractor: 0% user + 0% kernel / faults: 86 minor
  0.4% 3899/kworker/u16:3: 0% user + 0.4% kernel
  0.4% 12837/kworker/0:2: 0% user + 0.4% kernel
  0.3% 10/rcu_preempt: 0% user + 0.3% kernel
  0.3% 1969/com.安卓.systemui: 0.2% user + 0.1% kernel / faults: 10 minor
  0.3% 367/logd: 0.1% user + 0.1% kernel / faults: 13 minor
  0.3% 18068/kworker/1:1: 0% user + 0.3% kernel
  0.2% 301/msm-core:sampli: 0% user + 0.2% kernel
  0.2% 16559/kworker/0:1: 0% user + 0.2% kernel
  0.2% 432/msm_irqbalance: 0% user + 0.1% kernel
  0.2% 485/irq/215-fc38800: 0% user + 0.2% kernel
  0.2% 4096/com.google.安卓.gms: 0.1% user + 0.1% kernel / faults: 66 minor
  0.2% 6227/com.google.安卓.ims: 0.1% user + 0% kernel / faults: 110 minor
  0.1% 250/cfinteractive: 0% user + 0.1% kernel
  0.1% 258/mmcqd/0: 0% user + 0.1% kernel
  0.1% 17837/com.vkontakte.安卓: 0.1% user + 0% kernel / faults: 6 minor
  0.1% 15/ksoftirqd/1: 0% user + 0.1% kernel
  0.1% 428/安卓.hardware.wifi@1.0-service: 0% user + 0.1% kernel
  0.1% 17656/kworker/u16:2: 0% user + 0.1% kernel
  0.1% 18023/com.Project100Pi.themusicplayer: 0% user + 0% kernel / faults: 34 minor
  0.1% 3/ksoftirqd/0: 0% user + 0.1% kernel
  0.1% 40/kworker/u17:0: 0% user + 0.1% kernel
  0% 57/system: 0% user + 0% kernel
  0.1% 368/servicemanager: 0% user + 0% kernel
  0.1% 575/thermal-engine: 0% user + 0.1% kernel
  0.1% 15700/mdss_fb0: 0% user + 0.1% kernel
  0% 8/rcuc/0: 0% user + 0% kernel
  0% 170/hwrng: 0% user + 0% kernel
  0% 433/lmkd: 0% user + 0% kernel
  0% 586/zygote: 0% user + 0% kernel / faults: 158 minor
  0% 7655/ru.gismeteo.gismeteo: 0% user + 0% kernel / faults: 19 minor
  0% 10682/com.安卓.vending: 0% user + 0% kernel / faults: 23 minor
  0% 14340/com.安卓.chrome:sandboxed: 0% user + 0% kernel / faults: 4 minor
  0% 17489/com.google.安卓.gm: 0% user + 0% kernel / faults: 39 minor
  0% 18073/com.somepackagename: 0% user + 0% kernel / faults: 10 minor
  0% 18605/kworker/u16:4: 0% user + 0% kernel
  0% 28197/kworker/3:2: 0% user + 0% kernel
  0% 5/kworker/0:0H: 0% user + 0% kernel
  0% 13/rcuc/1: 0% user + 0% kernel
  0% 20/ksoftirqd/2: 0% user + 0% kernel
  0% 25/ksoftirqd/3: 0% user + 0% kernel
  0% 44/irq/51-cpr: 0% user + 0% kernel
  0% 47/ksoftirqd/4: 0% user + 0% kernel
  0% 160/mdss_dsi_event: 0% user + 0% kernel
  0% 262/irq/224-spdm_bw: 0% user + 0% kernel
  0% 467/ksoftirqd/5: 0% user + 0% kernel
  0% 545/dmcrypt_write: 0% user + 0% kernel
  0% 564/jbd2/dm-2-8: 0% user + 0% kernel
  0% 576/qmuxd: 0% user + 0% kernel / faults: 9 minor
  0% 578/perfd: 0% user + 0% kernel / faults: 12 minor
  0% 587/audioserver: 0% user + 0% kernel / faults: 187 minor
  0% 594/media.metrics: 0% user + 0% kernel / faults: 53 minor
  0% 596/netd: 0% user + 0% kernel / faults: 63 minor
  0% 598/wificond: 0% user + 0% kernel / faults: 1 minor
  0% 600/rild: 0% user + 0% kernel
  0% 610/cnd: 0% user + 0% kernel
  0% 1835/wpa_supplicant: 0% user + 0% kernel / faults: 1 minor
  0% 3984/com.quicinc.cne.CNEService: 0% user + 0% kernel / faults: 7 minor
  0% 4118/com.google.安卓.googlequicksearchbox:search: 0% user + 0% kernel / faults: 15 minor
  0% 5010/com.facebook.orca: 0% user + 0% kernel / faults: 5 minor
  0% 5082/com.facebook.katana:notification: 0% user + 0% kernel / faults: 150 minor
  0% 7216/kworker/u17:6: 0% user + 0% kernel
  0% 15818/irq/504-synapti: 0% user + 0% 

FCMIDService等级:

public class FCMIDService extends FirebaseInstanceIdService{

    private static final String TAG = "FCMIDService";

    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the InstanceID token
     * is initially generated so this is where you would retrieve the token.
     */
    @Override
    public void onTokenRefresh() {
        CLog.d(TAG, "FCM id received");
        // Get updated InstanceID token.
        String token = FirebaseInstanceId.getInstance().getToken();
        //Do something with the token
        //...
    }

    @Override
    public void onCreate() {
        Log.d("atf", "on create here called");
        super.onCreate();
    }
}

根据日志ANR属于FCMIDService类,但这没有意义。调试应用程序时onCreate()方法从未被调用。那么ANR如果永远不会被执行,它怎么会落在那里呢

另一个重要通知: 当我将代码回滚到以前的工作版本(通过SVN)时,同样的问题仍然存在,这使我认为我使用的其中一个库的存储库发生了更改

EDIT2: 经过一点实验,我发现这个问题是由Facebook integration引起的。 当我拆下电话线时

"implementation 'com.facebook.安卓:facebook-安卓-sdk:[4,5)'" 

所有与之相关的Java代码ANR都消失了。 我不能在Facebook上辞职,所以我更换了

"implementation 'com.facebook.安卓:facebook-安卓-sdk:[4,5)'" 

"api 'com.facebook.安卓:facebook-安卓-sdk:4.36.0'" 

根据https://mvnrepository.com/artifact/com.facebook.安卓/facebook-安卓-sdk/3.19.0。但那没用

有没有关于工作的想法


共 (3) 个答案

  1. # 2 楼答案

    在调用super.onCreate()之前不要放置语句;这是非法的,而且很可能是从背景Service中获取ANR的原因,它几乎不可能在UiThread上运行,而且FirebaseInstanceIdService已被弃用,因此应该完全替换

  2. # 3 楼答案

    问题在于Facebook存储库。 我刚刚更改了应用程序中的一行代码。gradle文件: 来自

    implementation 'com.facebook.android:facebook-android-sdk:[4,5)'
    

    api 'com.facebook.android:facebook-share:4.36.0'
    

    就这样,没有其他变化

    下面是发生的事情: 由于我在依赖关系声明中使用了一个版本范围,gradle会自动将Facebook库更新为最新版本(目前为4.36.0)。Facebook最近确实更新了他们的存储库,这就是我开始遇到问题的时候

    解决方案不是实现他们的完整sdk(com.facebook.android:facebook安卓sdk:[4,5]),而是只实现其中的一部分(com.facebook.android:facebook share:4.36.0),因为我现在没有版本范围,如果facebook决定再次进行更新,我应该不会有任何问题

    所以很明显,最新Facebook库中的某些内容开始与某些内容发生冲突,或者他们只是做了一件糟糕的工作