从另一个服务启动服务并按值传递

时间:2014-03-12 10:27:48

标签: android service pass-by-value

我的Android应用程序中有一个服务。在onStartCommand期间,我将Service对象传递给另一个类。然后,从那里,有一个线程,在30秒后启动另一个服务。它是这样的:

public class FooService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        MyClass mc = new MyClass(this);
        mc.testMethod();
        stopSelf();
        return START_NOT_STICKY;
    }
}

这是MyClass:

public class MyClass {

    private Service service;

    public MyClass(Service service) {
        this.service = service;
    }

    public void testMethod() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(20*1000);
                    Intent intent = new Intent(service, BarService.class);
                    service.startService(intent);
                }
                catch (Exception e) {
                    // CATCH!
                }
            }
        }).start();
    }
}

现在,正如你所看到的,在FooService中我调用了stopSelf(),它会破坏那个Service对象。顺便说一句,MyClass有一个按值传递的服务的副本。 20秒后,我们可以从MyClass启动BarService。我已经对它进行了测试并且有效,但我无法理解为什么!我编写代码的方式很脏(对我而言)。从被销毁的服务开始另一项服务是否正确?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

  

我测试了它并且它有效,但我无法理解为什么

它今天适用于您测试的环境。它可能无法在所有环境中工作(例如,ROM mod),并且明天可能无法工作(例如,Android OS更新)。被破坏的Context,例如停止的服务,不应该用于任何事情。它发生 目前你以后仍然可以用它来调用startService(),但不能保证这种行为。

  

从被销毁的服务开始另一项服务是否正确?

没有。在这种情况下,我不明白为什么你首先需要两个服务。

  

我有一份该服务的副本

不,你没有。