系统4.03
最近发现了一个现象,如果在任务管理器中把一个Activity关掉,那么这个APK中所有运行的组件都会被关掉,而且有一个在Menifest中注册的广播接收器也收不到别的程序发给它的广播了。
但我的服务需要一直运行,有什么办法可以使服务不被关,或者可以知道什么时候被关以便重新启动?
在这种情况下如何使广播接收器能重新收到别的程序发给它的广播?

解决方案 »

  1.   

    1.广播接收器定义的intent filter有两种注册方式,如果在manifest中注册的,即使你的应用没有运行,同样可以收到广播,并执行响应的代码。如果在代码中注册的广播,那么只能在应用运行时才能收到广播!我不知道,你的意思是不是指的这个!~
    2.关于服务,也有两种启动方式,如果你用startService的话,那么activity如果关掉,服务是不会关闭的,会一直运行的;如果用bindService,那么服务会和activity同事关闭。
    希望对你有用!
      

  2.   

    @Override
        public void onDestroy() {
            Log.i("Utopia", "service销毁");
            super.onDestroy();
            Intent i = new Intent();
            i.setClass(this, CallService.class);
            startService(i);
        }
      

  3.   

    wlianghe00
    打印了一下LOG,发现onDestroy没有被调用。renruir
    manifest中已经注册了一个广播接收器,但程序在任务管理器中关闭后,这个接收器在一段时间内无法接收到新的广播怪我疏忽没有解释清楚,我用的是startService,按说这种方式如果没病没灾的,应该是可以长命百岁的。
      

  4.   

    ActivityManager activityManager = (ActivityManager) mContext
    .getSystemService(Context.ACTIVITY_SERVICE);
    String packageName = "com.hmausa.bluelink";
    String bingMapClassName = "com.hmausa.bluelink.BingMapActivity";
    List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1);
    if (tasksInfo.size() > 0) {
    ComponentName topConponent = tasksInfo.get(0).topActivity;
    if (packageName.equals(topConponent.getPackageName())) {
      

  5.   

    ActivityManager activityManager = (ActivityManager) mContext
    .getSystemService(Context.ACTIVITY_SERVICE);
    String packageName = "com.hmausa.bluelink";
    String bingMapClassName = "com.hmausa.bluelink.BingMapActivity";
    List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1);
    if (tasksInfo.size() > 0) {
    ComponentName topConponent = tasksInfo.get(0).topActivity;
    if (packageName.equals(topConponent.getPackageName())) {