热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FAQ_16_androidserviceintentactivity

在Service中启动Activity,有很多方式,比如隐式启动、显式启动等。隐式启动Activity,需要在manifest.xml中为

在 Service 中启动 Activity,有很多方式,比如隐式启动、显式启动等。


隐式启动 Activity,需要在manifest.xml 中为该 Activity 配置,如下所示:



MyActivity 是要在 Service 中启动的那个 Activity,为其配置 action、category等。(category 不是必须的)。





在 Service 中这样启动 MyActivity:

// 等效于 // Intent i = new Intent(); // i.setAction("mark.zhang"); Intent i = new Intent("mark.zhang"); // 这个不是必需的 i.addCategory(Intent.CATEGORY_DEFAULT); startActivity(i);


也可以显式启动 MyActivity ,这中方式不需要在manifest.xml文件中配置,直接写代码:
Intent i = new Intent(this, DialogActivity.class); startActivity(i);

ok,无论你采用哪种方式,运行之后,你可以看到如下信息:
10-06 19:30:50.895: ERROR/AndroidRuntime(5789):Caused by: android.util.AndroidRuntimeException:Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 10-06 19:30:50.895: ERROR/AndroidRuntime(5789): at android.app.ApplicationContext.startActivity(ApplicationContext.java:550) 10-06 19:30:50.895: ERROR/AndroidRuntime(5789): at android.content.ContextWrapper.startActivity(ContextWrapper.java:248) 10-06 19:30:50.895: ERROR/AndroidRuntime(5789): at com.wpstar.receiver.ServerService.onStartCommand(ServerService.java:34) 10-06 19:30:50.895: ERROR/AndroidRuntime(5789): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2873) 10-06 19:30:50.895: ERROR/AndroidRuntime(5789): ... 10 more

明显的可以看出:
10-06 19:30:50.895: ERROR/AndroidRuntime(5789):Caused by: android.util.AndroidRuntimeException:Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.Is this really what you want?

那麽照做吧!修改代码:
// 等效于 // Intent i = new Intent(); // i.setAction("mark.zhang"); Intent i = new Intent("mark.zhang"); // 这个不是必需的 i.addCategory(Intent.CATEGORY_DEFAULT); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i);

或者:
Intent i = new Intent(this, MyActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i);

也就是需要 addFlags(Intent.FLAG_ACTIVITY_NEW_TASK),当然也可以这样:


setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);

关于setFlags() 方法与 addFlags() 方法可以查看源码!







推荐阅读
author-avatar
whucad
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有