如何在匿名内部类的方法中完成方法调度?

时间:2014-10-14 02:22:40

标签: java android

Java新手在这里。 我在android教程中阅读了以下代码。

Eclipse说stopSelf()调用实际上是调用android.app.Service.stopSelf()方法,我相信这是外部类SimpleService继承的。

但是,这一行驻留在Thread的匿名子类中的方法中。 我在这里不明白的是编译器(我推测)是如何知道该行调用Service中的方法而不是匿名类中的方法?

欢迎任何解释。

public class SimpleService extends Service { @Override public void onStart(Intent intent, int startId) { Thread t = new Thread() { @Override public void run() { try { Thread.sleep(20 * 1000); stopSelf(); // HERE } catch (InterruptedException e) { } } }; t.start(); } }


使用java一段时间之后,对未来人员的更新:

除了理解匿名类/内部类的范围之外,您应该知道这个标题有点不好。 我认为术语 resolve dispatch 更合适(对于确定在运行时调用的实际方法的动态语言更常见)。

1 个答案:

答案 0 :(得分:0)

系统可以运行服务有两个原因。如果有人调用Context.startService()[这里上下文意味着你的应用程序上下文]那么系统将检索服务(创建它并在需要时调用它的onCreate()方法)然后调用它的onStartCommand(Intent,int,int)方法客户提供的参数。此服务将在此时继续运行,直到调用Context.stopService()或stopSelf()。请注意,对Context.startService()的多次调用不会嵌套(尽管它们会导致多次对onStartCommand()的相应调用),因此无论启动多少次,一旦Context.stopService()或stopSelf将停止服务() 叫做;但是,服务可以使用它们的stopSelf(int)方法来确保在处理完启动意图之前不会停止服务。

欲了解更多信息,请参阅 http://developer.android.com/reference/android/app/Service.html