Android - 从其他类停止服务

时间:2014-02-28 16:11:46

标签: java android android-intent android-service

在我正在制作的应用程序中,我想在一个活动中启动一个意图

Intent toonService = new Intent(Login.this, ToonService.class);
toonService.putExtra("toonName", result.getName());
Login.this.startService(toonService);

以下代码是否会关闭我刚刚打开的意图?如果不是我怎么能得到它?

Intent toonService = new Intent(MainActivity.this,ToonService.class);
MainActivity.this.stopService(toonService);

第二段代码将在与第一段代码完全无关的时间被调用。

2 个答案:

答案 0 :(得分:4)

好吧,假设您只希望一次运行此服务的一个实例,您可以在服务类中保存一个静态变量并从任何地方访问它。实施例;

public class ToonService extends Service{

    public static ToonService toonService;

    public ToonService(){
        toonService = this;
    }
    ...

}

ToonService的构造函数现在将创建的实例存储在静态变量toonService中。现在,您可以从班级的任何位置访问该服务。以下示例;

ToonService.toonService.stopSelf();

您还可以通过让类存储运行实例的静态List来处理多个实例,而不仅仅是单个实例。 It is worth noting,当您告知服务停止时,您只是请求它已停止。最终,Android操作系统将确定何时关闭。

答案 1 :(得分:0)

当然,您可以从其他活动关闭服务。

方法-1:执行以下步骤
1.在活动1中编写一个返回该活动参考的方法 2.在活动1中编写一个关闭服务的方法 3.在Activity2中调用第一个方法并获取引用。使用该引用调用第二种方法

1. private static Context context=this;
   public static  Context getContext(){
        return context;
   }

2. public void stop(){
       //stop the service here
   }

3.  In activity 2
     Activity context=Activity1.getContext();
     context.stop();

方法2:按照以下步骤操作。

  1. 在Activity1中将BroadcastReceiver写为内部类。在onReceive()中停止服务。
  2. 从第二个活动广播意图。