fragment 使用过程中单例模式引发的问题
来源:互联网 发布:centos怎么发邮件 编辑:程序博客网 时间:2024/06/07 17:54
fragment 使用过程中单例模式引发的问题
在实际项目开发中,遇到一个这样的问题。
Android Notification详解——响应notification事件
一般来讲,点击一个notification后,都会打开一个Activity做为对点击事件的响应,这个Activity是之前在PendingIntent中设置好的。
经常玩Android手机的应该都有印象,在日历应用中,你新建一个提醒,当提醒通知收到后,你点击通知,会进入提醒的内容页面,如果这个时候按back键,会直接退出应用。
但是在Gmail的应用中,如果有一封新邮件到来,那么点击通知后,会进入到邮件的内容页面,等你看完邮件,点击back键,会退到邮件列表页面,再按back键,才会退出应用。
我们总结一下两种情况,假设我们的应用有两个Activity(ParentActivity、SubActivity),notification中设置打开的Activity为SubActivity。
那么第一种情况就是:
点击Notification ——>进入SubActivity ——> back键 ——> 退出应用
第二种情况:
点击Notification ——>进入SubActivity ——> back键 ——> 退到ParentActivity ——>back键 ——>退出应用
第一种情况比较简单,只需要在PendingIntent中指定Activity,不需要其他设置,Android默认的就这样。
- PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
但是在创建PendingIntent的时候需要注意参数PendingIntent.FLAG_CANCEL_CURRENT
这个标志位用来指示:如果当前的Activity和PendingIntent中设置的intent一样,那么久先取消当前的Activity,用PendingIntent中指定的Activity取代之。
另外,需要在Manifest中对指定的Activity设置属性
- <activity android:name=".SubActivityl"
- android:launchMode="singleTask"
- android:taskAffinity=""
- android:excludeFromRecents="true">
- </activity>
第二种情况稍微复杂点,因为如果只打开一个SubActivity,程序并没办法知道他的上一级Activity是谁,所以需要在点击Notification时打开一组Activity,但是我们并不需要一个个去调用startActivity方法,PendingIntent提供了个静态方法getActivities,里面可以设置一个Intent数组,用来指定一系列的Activity。
所以我们首先写一个函数创建一个Activity数组:
- Intent[] makeIntentStack(Context context) {
- Intent[] intents = new Intent[2];
- intents[0] = Intent.makeRestartActivityTask(new ComponentName(context, com.example.notificationtest.MainActivity.class));
- intents[1] = new Intent(context, com.example.notificationtest.SubActivity.class);
- return intents;
- }
其中需要注意的是Intent.makeRestartActivityTask方法,这个方法用来创建activity栈的根activity
接下来,创建并显示Notification:
- void showNotification(Intent intent) {
- Notification notification = new Notification(
- R.drawable.status_icon,
- "Hello World ticker text",
- System.currentTimeMillis());
- PendingIntent contentIntent = PendingIntent.getActivities(
- this,
- 0,
- makeIntentStack(this),
- PendingIntent.FLAG_CANCEL_CURRENT);
- notification.setLatestEventInfo(
- this,
- "Title",
- "Hey, shall we have a dinner tonight",
- contentIntent);
- notification.flags |= Notification.DEFAULT_ALL;
- mNM.notify(1, notification);
- }
- fragment 使用过程中单例模式引发的问题
- Fragment重叠问题引发的思考
- Fragment重叠问题引发的思考
- Android 中使用Fragment所引发的
- Fragment的使用与学习过程中遇到的问题
- 使用Fragment +searchview过程中遇到的问题
- 使用butterknife引发的问题
- ViewPager+Fragment使用过程中手动清除及更新Fragment遇到的问题
- fragment中由于inflater获取不对引发的fragment中组件不能刷新内容的问题
- Fragment的使用与学习及使用过程中遇到的问题
- Fragment的使用与学习及使用过程中遇到的问题
- Fragment的使用与学习及使用过程中遇到的问题
- 由使用tag 0 引发的问题
- 记录错误使用eventbus引发的问题
- 嵌套使用fragment的问题
- fragment的使用问题IllegalStateException
- fragment的使用注意问题
- 一起空指针引发的程序问题的排查过程
- 动物应该这么叫---虚函数
- MySQL 三种关联查询的方式: ON vs USING vs 传统风格
- IntentService实现下载
- 【Android】UiAutomator简要介绍
- Ear、Jar、War文件之间有何不同?它们分别使用在哪种环境下?
- fragment 使用过程中单例模式引发的问题
- TOJ 1551 Power Hungry Cows -- 搜索
- 防网站采集非常有效的办法
- Hadoop Map Reduce Secondary Sort
- CentOS查看系统版本信息
- 第十四周 项目2-形状类族的中的纯虚函数
- ubuntu下编写c语言程序
- 净网行动进行中,你的网站躺枪了吗?
- 商店管理系统代码