java应用程序在调用App onCreate()之前运行到ANR
我在一个项目上工作了很长时间。
最近,我在应用程序启动时出现了一个ANR
问题。
事实上,由于从未调用App.onCreate()
方法,因此应用程序甚至没有启动。据我所知,在此之前唯一调用的是任何ContentProvider
的onCreate()
方法。所以我从清单文件中删除了它们,但问题仍然存在。应用程序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。但那没用
有没有关于工作的想法
# 1 楼答案
它基本上发生在你阻塞UI线程太久的时候。所以,请检查您最近的代码,您在其中做了一些阻止UI线程的事情。有关ANR的更多信息,请访问: https://developer.android.com/topic/performance/vitals/anr
# 2 楼答案
在调用
super.onCreate()
之前不要放置语句;这是非法的,而且很可能是从背景Service
中获取ANR
的原因,它几乎不可能在UiThread上运行,而且FirebaseInstanceIdService已被弃用,因此应该完全替换# 3 楼答案
问题在于Facebook存储库。 我刚刚更改了应用程序中的一行代码。gradle文件: 来自
到
就这样,没有其他变化
下面是发生的事情: 由于我在依赖关系声明中使用了一个版本范围,gradle会自动将Facebook库更新为最新版本(目前为4.36.0)。Facebook最近确实更新了他们的存储库,这就是我开始遇到问题的时候
解决方案不是实现他们的完整sdk(com.facebook.android:facebook安卓sdk:[4,5]),而是只实现其中的一部分(com.facebook.android:facebook share:4.36.0),因为我现在没有版本范围,如果facebook决定再次进行更新,我应该不会有任何问题
所以很明显,最新Facebook库中的某些内容开始与某些内容发生冲突,或者他们只是做了一件糟糕的工作