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 更合适(对于确定在运行时调用的实际方法的动态语言更常见)。
答案 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