通知点击加载活动 - 活动的UI显示为冻结

时间:2013-10-17 22:09:51

标签: android service android-notifications

我有一个启动服务的Android应用程序,它在后台持续运行。启动此服务时,它会创建一个待处理的意图,假设在单击通知时加载应用程序的主UI。这在手机处于活动状态并正在使用时有效,但如果设备处于非活动状态超过30分钟左右,则在用户单击通知后会出现一个奇怪的错误。而不是加载UI并显示所有按钮等 - 黑屏显示冻结应用程序。

以下是我启动服务的方式 - 如果我没有正确启动服务。

public class MainActivity extends Activity {
[...]
    public void serviceOn(View view){
        startService(new Intent(getBaseContext(), StableIPService.class));
    }
[...]
}

这是我服务的代码

public class StableIPService extends Service {
[...]
    public int onStartCommand(Intent intent, int flags, int startId) {
        Notification notice;
        //The intent to launch when the user clicks the expanded notification
        Intent intent = new Intent(this, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

        PendingIntent pendIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        // Build notification
        notice = new NotificationCompat.Builder(this)
            .setContentTitle(getString(R.string.app_name))
            .setContentText("Checking for malicious network connections")
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentIntent(pendIntent)
            .build();

        notice.flags |= Notification.FLAG_NO_CLEAR;
        startForeground(myID, notice);
        return (START_STICKY);
    }
[...]
}

...我在某处读到将这些属性添加到AndroidManifest.xml文件中会有所帮助,所以我添加了它们......它似乎没有任何帮助,但它们在这里。

<activity
        android:name=".MainActivity"
        [...]
        android:launchMode="singleTask"
        android:taskAffinity=""
        android:excludeFromRecents="true" >

1 个答案:

答案 0 :(得分:0)

如果其他人遇到此问题,请检查您运行的可能正在构建大型队列的进程。在我的情况下,我有一个设置为scheduleAtFixedRate的计时器。这意味着当手机正在睡觉时(因为计时器无法执行),计时器线程队列中添加了大量的计时器事件,当手机醒来时,导致应用程序冻结了一段时间,因为它在挣扎完成所有积压的计时器任务。