Android 在Service中调用Activity

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 10:41 我要评论(0)

前几天做一个小应用,需要用到在service中调用Activity, 但是发现总是出现ANR,百度了下,发现各种说法,不过经过尝试,发现问题不大,只需要加一句代码就足够了,代码如下:

public class XXXService extends Service {

public void onCreate() {

super.onCreate();

//拨打电话

Intent call = new Intent("android.intent.action.CALL", Uri.parse("tel:110"));

call.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(call);

}

}

public class XXXService extends Service {

public void onCreate() {

super.onCreate();

//拨打电话

Intent call = new Intent("android.intent.action.CALL", Uri.parse("tel:110"));

call.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(call);

}

关键语句是:call.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 究其原因可能是android系统考虑到稳定性(容易出现ANR)。

可以看一下官方文档中对于startActivity()方法的描述:

Note that if this method is being called from outside of an Activity Context, then the Intent must include the FLAG_ACTIVITY_NEW_TASK launch flag. This is because, without being started from

an existing Activity, there is no existing task in which to place the new activity and thus it needs to be placed in its own separate task.

大致的意思是这样的:请注意,如果一个外部的Activity Context调用此方法,那么,Intent对象必须包含 FLAG_ACTIVITY_NEW_TASK标志,这是因为,待创建的Activity并没有从一个已经存在的Activity启动(任务栈中并没有此Activity),它并没有已经存在的任务,因此它需要被放置在自己独立的任务中(也就是在任务栈中新建一个任务)。

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...