当前位置: 首页 > 面试题库 >

即使强制停止了应用程序,也要重新启动服务;关闭应用程序后,仍要在后台运行服务。

祖利
2023-03-14
问题内容

我正在尝试在后台运行服务。我的应用程序要做的是,当用户选中复选框,然后服务启动,而未选中时,服务停止。哪个工作正常。但是问题是,当我从任务管理器中关闭应用程序时,它也停止了服务。我想要的是即使从任务管理器关闭后也要保持服务运行。然后,停止该服务的唯一方法是由用户自己打开框。

我该如何实现?

这是我的代码

我的主要活动

public class SampleServiceActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final CheckBox cb = (CheckBox) findViewById(R.id.checkBox1);

    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {

            if(isChecked) {
                Toast.makeText(getBaseContext(), "Checked", Toast.LENGTH_LONG).show();
                startService(new Intent(getBaseContext(), MyService.class));
            } else {
                Toast.makeText(getBaseContext(), "Unchecked", Toast.LENGTH_LONG).show();
                stopService(new Intent(getBaseContext(), MyService.class));
            }
        }

    });
}
}

我的服务等级

public class MyService extends Service {
Notify n = new Notify();
@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    n.initNotification(getBaseContext(), true);
    return START_STICKY;
}

//method to stop service
public void onDestroy() {
    super.onDestroy();
    n.cancelNotification(getBaseContext());
    Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();
}
}

更新资料

我们如何使该服务像gtalk服务一样运行?


问题答案:

我不确定您指的是哪个“任务管理器”会以不同的方式执行操作,因此我将答案基于用户进入“设置”->“管理应用程序”并->强制停止应用程序时的操作android给了他。

假设您的服务正在运行的进程的一部分,如果用户强制停止你的过程中,你是从防止 以往任何时候都 再次运行该服务,直到用户 手动
启动you.This尤其是从合法的 3.0及以上
版本(检查你的)。当您认为有一个应用程序始终保持服务启动并以某种方式使用户烦恼时,这似乎也合乎逻辑。因此,当用户在应用上命令命中(:)强制停止)时,它
不应重新启动 服务以继续困扰用户。


例如,想象一下,如果您创建一个仅在处理器时间通过持有唤醒锁就可以吃的应用程序,而又无法杀死它们,将会发生什么情况。这将是可怕的,并且将是巨大的安全灾难。

因此,在用户启动您的活动之一之前,您 将无法 以任何方式重新启动服务。

同样,您不能禁用强制停止按钮AFAIK。您应该认为,除了您的应用程序和(在一定程度上)您被授予访问权限的资源之外,设备上没有任何东西可以控制

最后,如果您想强制停止,即使gtalk应用程序也会屈服于您的意愿。仅当您使用Gtalk或使用gtalk服务的其他应用程序(例如PUSH
Gmail)(适用于gtalk不属于固件的手机)时,它才会启动。



 类似资料:
  • 我想保持一个服务在后台运行,即使当我的应用程序被杀死。我使用的是事件,但服务只在屏幕解锁时运行。我尝试了,但下载应用程序后至少需要重新启动手机一次。 理想情况下,我将使用启动服务所有X分钟。然后检查条件(电池电量、网络连接……)在开始服务之前。 问题是这样的事件不能从声明和监听,而是在活动中,这意味着应用程序是“活动的”。 有办法做我想做的事吗?

  • 我想在android应用程序中做后台服务,即使当应用程序处于关闭、杀死或后台状态时,它也应该始终保持运行,我目前有后台服务,当应用程序最小化时,它工作得很好,但当我关闭应用程序时,杀死应用程序时,它不工作。如果应用程序死亡,套接字是关闭的,即使我使用了android隔离进程true... 我想让套接字在任何情况下都可用

  • 当用户使用后退按钮退出应用程序时,Android中的后台服务将停止运行。如果应用程序在前台或后台(点击HOME按钮),同样的服务工作得很好。 有3个案例: null MainActivity.java SimpleService

  • 我试图重新创建Connect四,我成功了。但我想通过频繁地切换颜色,给玩家一个获胜的四张光盘在哪里的指示。我对线程和编程中的时间概念是新的。 我也成功地给了用户这个指示,但是在关闭应用程序之后,控制台仍然会给出输出,也是在使用SetonCloserEquest时。 代码如下:

  • 我有问题关闭我的javaFX应用程序,当我点击关闭按钮从我的阶段,我的应用程序消失,但如果我寻找它在我的任务管理器我的应用程序仍然没有关闭。我尝试使用下面的代码强制关闭主线程和所有子线程,但是问题仍然存在。