前几天做一个小应用,需要用到在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);}}
  关键语句是:  call.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);究其原因可能是android系统考虑到稳定性(容易出现ANR)。  


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

Note that if this method is being called from outside of anActivityContext, then the Intent must include theFLAG_ACTIVITY_NEW_TASKlaunch 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),它并没有已经存在的任务,因此它需要被放置在自己独立的任务中(也就是在任务栈中新建一个任务)。





更多相关文章

  1. Android(安卓)Service 服务—— bindService与remoteService
  2. 【070】Android(安卓)中相关功能的实现代码
  3. Android(安卓)程式开发:(十一)选择控件 —— 11.1 TimePicker
  4. Android(安卓)如何生成系统级应用
  5. Android(安卓)ICS创建StagefrightPlayer播放器的过程
  6. Android(安卓)Intent 序列化反序列化
  7. Android下使用TelephonyManager类获取设备电话相关信息
  8. Android中如何保存cookie
  9. Android(安卓)在JNI中执行Java方法--C/C++调用Java

随机推荐

  1. 【转】Android(安卓)分析内存的使用情况
  2. 基于Android的校园跳蚤市场(二手)的设计与
  3. Android核心分析28篇,强烈推荐android初学
  4. Android开发实践:利用ProGuard进行代码混
  5. android xml中 颜色透明度(不透明度)参照表
  6. Android 5.1 Settings模块源码分析
  7. 转:android: 静态XML和动态加载XML混合使
  8. android之如何使用Android的搜索框架
  9. Android(安卓)Drawable Resources系列2:
  10. Android 终于要跟 Chromium 和 WebKit 团