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

科技网编2023-04-07 16:302450

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

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

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

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

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

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

解决方法

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

我该如何实现?

这是我的代码

我的主要活动

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服务一样运行?

评论区