专栏首页程序员大飞Android Service启动到Activity

Android Service启动到Activity

Android Service启动到Activity

从Service启动到Activity基本可以分为两类: 1.从自己应用的Service启动自己应用的Activity,即显式意图; 2.从自己应用的Service启动到其他应用的Activity,或者从别的应用的Service启动到自己应用的Activity,即隐式意图;

1.显式意图启动

下面为示例写法:

	Intent intent = new Intent(EmqttService.this, CallingActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);

2.隐式意图启动

需要在manifest.xml中为该Activity配置<intent-filter>标签,为其配置action和category

    <activity android:name=".CallingActivity" >  
            <intent-filter>  
                <action android:name="com.call"></action>  
                <category android:name="android.intent.category.DEFAULT"/>  
            </intent-filter>  
    </activity>  

在要启动的Service里这样写:

	Intent i = new Intent("com.call");  
	i.addCategory(Intent.CATEGORY_DEFAULT);  
	i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
	startActivity(i);

注意“com.call”为要启动Activity的Action.

##3.为什么Android在Service 里面启动Activity要强制规定使用参数FLAG_ACTIVITY_NEW_TASK呢?

我们可以来做这样一个假设,我们有这样一个需求: 我们在电话本里面启动一个Service,然后它执行5分钟后,启动一个Activity 那么很有可能用户在5分钟后已经不在电话本程序里面操作了,有可能去上网,打开浏览器程序了。 5分钟后,此时当前的Task是浏览器的task,那么弹出Activity,如果这个Activity在当前Task的话,也就是浏览器的Task;那么用户就会觉得莫名其妙;因为弹出的Activity和浏览器在一个Task,本来这个Activity应该属于电话本的。 所以,对于Service而言,干脆强制定义启动的Activity要创建一个新的Task. 这种设计,我觉得还是比较合理的。

最后感谢参考文章:http://bbs.51cto.com/thread-1133875-1.html

Thanks all.

本文首发于我的微信公众号,更多干货文章,请扫描二维码订阅哦:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android检测Activity或者Service是否运行

    需求:假设我们的APP有3个页面AActivity,BActivity,CActivity,我们的APP需要一直运行在前台(特殊设备),要求实现一个监控服务,来...

    IT大飞说
  • java.lang.IllegalStateException commit already called

    #java.lang.IllegalStateException commit already called

    IT大飞说
  • Android Picasso实现圆形图片和圆角图片

    IT大飞说
  • 又有免费GPU资源了:可直接跑Jupyter Notebook,还支持断点续命

    福利来自一家叫做Paperspace的云计算公司,他们提供了名叫Gradient的服务:大家都可以用云端GPU,直接跑Jupyter Notebook,不需要付...

    代码医生工作室
  • android自定义view实现progressbar的效果

    一键清理是很多Launcher都会带有的功能,其效果也比较美观。实现方式也许有很多中,其中常见的是使用图片drawable来完成的,具体可以参考这篇文章:模仿实...

    xiangzhihong
  • RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播方案EasyNVR出现操作和画面显示不一致问题如何优化?

    众所周知,EasyNVR可以将局域网/广域网上的海康/大华等网络摄像头由rtsp转换为rtmp、rtsp、hls、flv协议转换,并提供推流服务,可以将拉到的网...

    EasyNVR
  • 【DB笔试面试796】在Oracle中,如何查看和设置字符集?

    NLS(National Language Support,国家语言支持)是数据库的一个非常强大的特性,控制着数据的许多方面,最重要的两个方面包括:1、文本数据...

    小麦苗DBA宝典
  • 慕课网高并发实战(七)- J.U.C之AQS

    3.不断重新尝试获取锁(当前结点为head的直接后继才会 尝试),如果获取失败,则会阻塞自己,直到被唤醒

    Meet相识
  • 自定义View常用例子二(点击展开隐藏控件,九宫格图片控件)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

    用户2965908
  • jquery 绑定事件 - submit() 用户递交表单

    这个submit()函数是在form表单点击submit按钮的时候默认可以触发的。 为什么需要触发这个submit()事件呢? 原因就是很多时候表单的提交并...

    Devops海洋的渔夫

扫码关注云+社区

领取腾讯云代金券