【问题标题】:Android - Stop a Service from a different classAndroid - 停止来自不同类的服务
【发布时间】:2014-02-28 16:11:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android android-intent android-service


    【解决方案1】:

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

    public class ToonService extends Service{
    
        public static ToonService toonService;
    
        public ToonService(){
            toonService = this;
        }
        ...
    
    }
    

    ToonService 的构造函数现在将创建的实例存储在静态变量toonService 中。现在,您可以从课堂上的任何地方访问该服务。下面的例子;

    ToonService.toonService.stopSelf();
    

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

    【讨论】:

    • 谢谢!我会试试这个
    • 我认为public static toonService 无效。 (它缺少类型)
    • @JoshM - 非常正确,很明显。我会改正的。
    • 不起作用...你不能停止 ToonService.toonService 你必须停止一个意图。
    • @user3293629 - 答案已修改,试一试。 ToonService.toonService.stopSelf();
    【解决方案2】:

    当然,您可以从另一个活动中关闭服务。

    方法一:执行以下步骤
    1. 在活动 1 中编写一个返回该活动引用的方法。
    2.在Activity 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();
    

    方法二:按以下步骤操作。

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

    【讨论】:

    • 什么时候调用 getContext() 方法?
    • 因为 stop() 是一个非静态方法,我们需要该类引用来调用此方法。因此,为了获取该类引用,我们使用 gerContext() 方法。例如:Activity1.getContext().stop().
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多