关闭应用程序后如何停止从多个活动调用的Android服务?

时间:2018-08-06 10:12:17

标签: android android-studio service android-service

我有一个<!DOCTYPE html> <html> <head> <title></title> </head> <body> <table> <tr> <td class="ars">1. District</td> <td class="ams">:<a style="padding-left: 8px;"> ktm qwerty</a></td> </tr> <tr> <td class="ars">2. Station</td> <td class="ams">:<a style="padding-left: 8px;"> new york city</a></td> </tr> <tr> <td class="ars">3. Date & Time </td> <td class="ams">:<a style="padding-left: 8px;">01-01-2018 </a></td> </tr> <tr> <td class="ars">3. Particulars of search</td> </tr> <tr> <td class="ars">&emsp;a)What are you wearing</td> <td>: <a style="padding-left: 8px;">no</a> </td> </tr> <tr> <td class="ars"> <span>4.</span> <p class="test">The email id you are using and the corresponding address and phone number along with fathers name</p> </td> <td>:</td> </tr> </table> </body> </html>女巫,几乎每一个活动都被这样召唤:

public class Tracking extends Service

这很好用, Intent serviceIntent = new Intent(this, Tracking.class); serviceIntent.putExtra("name", "Tabla3b Kras"); serviceIntent.putExtra("time", TimeGenerator.getTime()); startService(serviceIntent); 仅在第一时间被调用,public void onCreate()每隔一次被调用。 我的问题是,当用户关闭应用程序时。假设您按了两次后退或进入打开的应用列表,然后将其消除。我收到一个“不幸的是,“ appname”已停止工作。

我知道我可以在onStop()中关闭该服务,但是由于我是从几乎所有活动中调用该服务的,因此我必须在所有活动中都实现onStop()还是足以在MainActivity中完成它.java?如果用户在活动之间进行切换,服务会停止吗?

1 个答案:

答案 0 :(得分:2)

服务是一个后台进程。这并不是要从每项活动开始/停止。

  • 您只能在应用中仅一次启动服务。就像您在第一个活动(启动)或应用程序级别的班级中开始一样。您无需在每次活动中都开始服务。
  • 不需要停止每项活动的服务。处理 onBackPress() 后,您可以停止服务。
  

然后如何从其他活动将变量传递给服务?

您可以通过多种方式在“活动与服务”之间进行交流。

如果您问我的偏爱,我早些时候使用过BroadcastReceiverBinder。但是现在我使用EventBus 。您可以在 EventBus documentation 中简化实施步骤。

建议:

检查您的服务是否已在运行。如果未运行,请在使用前启动服务。

private boolean isMyServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}