android - Android 应用程序在通知点击时启动缓慢
问题描述
我正在使用 FCM 向我的应用发送推送通知;用户点击通知时的预期行为是正常启动应用程序,例如点击启动器应用程序图标。
目前,当用户点击通知时,应用程序打开前会花费超过 30 秒的时间。通知消失了,但应用程序没有打开......甚至没有白屏,什么都没有。
当onMessageReceived
被触发时,displayNotification
方法被调用。
private void displayNotification(String title, String body) {
createNotificationChannel();
PendingIntent contentIntent = generateNotificationContentIntent();
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, CONTENTS_CHANNEL_ID)
.setSmallIcon(R.drawable.logo_no_bg_white)
.setContentTitle(title)
.setContentText(body)
.setContentIntent(contentIntent)
.setAutoCancel(true);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(new Random().nextInt(), notificationBuilder.build());
}
private PendingIntent generateNotificationContentIntent(){
Intent intent = new Intent(this, MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntentWithParentStack(intent);
return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
}
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O){
return;
}
NotificationChannel notificationChannel = new NotificationChannel(CONTENTS_CHANNEL_ID, CONTENTS_CHANNEL_ID, NotificationManager.IMPORTANCE_DEFAULT);
notificationChannel.setDescription(CONTENTS_CHANNEL_ID);
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(notificationChannel);
}
我的 onCreate MainActivity 方法只是检查用户是否已登录,如果是,则启动 HomeActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PACKAGE_NAME = getApplicationContext().getPackageName();
//Read shared preferences.
sharedPref = getSharedPreferences(PACKAGE_NAME, Context.MODE_PRIVATE);
if(sharedPref.contains("token") || sharedPref.getBoolean("isGuest", false)){
//Redirect to home
Intent homeIntent = new Intent(getApplicationContext(), HomeActivity.class );
homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(homeIntent);
finish();
}
loadTowns(this);
}
我究竟做错了什么?
更新:清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="my.awesome.package">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<application
android:allowBackup="false"
android:icon="@mipmap/icon"
android:label="@string/app_name"
android:roundIcon="@mipmap/icon"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.com.vansuita.pickimage.provider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/picker_provider_paths" />
</provider>
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/logo_no_bg_white" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@android:color/holo_orange_dark" />
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".LoginActivity"
android:screenOrientation="portrait"
android:theme="@style/NoActionBar" />
<activity
android:name=".HomeActivity"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
<activity
android:name=".ChannelProfileActivity"
android:label="@string/channel"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
<activity
android:name=".TownProfileActivity"
android:label="@string/town"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
<activity
android:name=".ContentActivity"
android:label="@string/content"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".HomeActivity" />
</activity>
<activity
android:name=".ContentsListActivity"
android:label="@string/contents"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".HomeActivity" />
</activity>
<activity
android:name=".QuestionResultsActivity"
android:label="@string/question"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".HomeActivity" />
</activity>
<activity
android:name=".ForgetPasswordActivity"
android:label="@string/DidYouForgetPassword"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
<activity
android:name=".ValidationProcesActivity"
android:label="@string/verify_user"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".HomeActivity" />
</activity>
<activity
android:name=".QuestionVoteActivity"
android:label="@string/question"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".HomeActivity" />
</activity>
<activity
android:name=".NewUserActivity"
android:label="@string/new_user"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
<activity
android:name=".NewUserSuccessActivity"
android:label="@string/new_user"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
<service android:name=".firebase.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".firebase.MyFirebaseInstanceIdService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<activity
android:name=".NotificationsActivity"
android:label="@string/notifications"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
<activity
android:name=".ViewNotificationActivity"
android:label="@string/notifications"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
<activity
android:name=".NewFriendshipRequestActivity"
android:label="@string/notifications"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
<activity
android:name=".TypeUserSelectionActivity"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
<activity
android:name=".SelectTownActivity"
android:screenOrientation="portrait"
android:theme="@style/WhiteActionBarTheme" />
</application>
解决方案
试试这个,它对我有用。
Intent notificationIntent = new Intent(this, MainActivity.class);
/*flags for resume activity*/
notificationIntent.setFlags( Intent.FLAG_ACTIVITY_SINGLE_TOP
|Intent.FLAG_ACTIVITY_CLEAR_TASK
|Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
/*for clear notification on click*/
builder.setAutoCancel(true);
推荐阅读
- javascript - 错误:使用 Parcel 运行 Cypress 时找不到绑定文件
- java - 如何确定 2 个 .jar 文件是否是“相同”的版本?
- html - 负责任的工具提示/引导程序 4
- javascript - 为什么这些 javascript 对象是相等的?
- javascript - 如何处理动态链接网址?
- node.js - 面临在实时服务器上上传构建的问题
- amazon-web-services - 来自 Spark 的 S3 写入间歇性失败,错误代码为 404 NoSuchKey
- sql - 我如何在我的 PostgreSQL 数据库中调用另一个过程
- dependency-injection - @BindsInstance 上的 @Singleton
- amazon-web-services - 未知动态 url 路径上的 AWS 应用程序负载均衡器