即使应用程序被强制停止也会重新启动服务,即使在关闭应用程序后仍然在后台继续运行服务如何?

Om3*_*3ga 17 java android android-service

我正在尝试在后台运行服务.我的应用程序所做的是当用户检查复选框然后服务启动时以及取消选中时服务停止.哪个工作得很好.但问题是,当我从任务管理器关闭应用程序时,它也会停止服务.我想要的是即使它从任务管理器关闭后仍保持服务运行.然后,只有通过取消方框才能让用户自己停止该服务.

我怎样才能做到这一点?

这是我的代码

我的主要活动

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));
            }
        }

    });
}
}
Run Code Online (Sandbox Code Playgroud)

我的服务类

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();
}
}
Run Code Online (Sandbox Code Playgroud)

更新

我们如何才能使这项服务像gtalk服务一样运行?

Akh*_*hil 20

我不确定你指的是哪个'任务管理器',因为不同的人会采取不同的行为,所以当我的用户进入设置 - >管理应用程序并且 - >强制停止应用程序时,我的答案基于操作android给了他.

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

例如,想象一下,如果你可以通过按住唤醒锁来创建只在你的处理器时间吃过的应用程序会发生什么,而你却无法杀死它们.这将是一场可怕的巨大安全灾难.

所以,你不会直到用户推出的活动之一是能够通过任何方式重新启动服务.

此外,您无法禁用强制停止按钮AFAIK.您应该认为除了您的应用程序之外,设备上没有任何内容可以控制,并且(在有限的范围内)您被授予访问权限的资源.

最后,如果你想强迫停止,即使是gtalk app也会屈服于你的意志.只有当您使用Gtalk或其他使用gtalk服务的应用程序(例如PUSH Gmail)时才会启动它(对于gtalk不属于固件的手机).另请参阅Android C2DM:

/sf/answers/786714561/

  • 你提出了很好的观点,但我并不知道如何做到这一点.在4.0(ICS)中,即使我强行关闭它,谷歌的日历应用程序仍会激活通知.我也想知道如何做到这一点.有任何想法吗? (3认同)

Com*_*are 7

但问题是,当我从任务管理器关闭应用程序时,它也会停止服务.

正确.

我想要的是即使它从任务管理器关闭后仍保持服务运行.然后,只有通过取消方框才能让用户自己停止该服务.

您可以使用C/C++实现服务,将其构建到一些自定义固件中,并说服人们在其设备上安装该固件.

当我们安装gtalk时,一旦我们登录,它就不会出现在任务管理器的活动应用程序选项卡中.但它在后台运行.

它是固件的一部分.


Pra*_*ara 5

我认为这个链接会对你有所帮助.
在管理应用程序中禁用强制停止按钮

它禁用了Package Installer设置中的Force Stop按钮,因此,任何人都无法停止您的应用程序.