我在一个类中有这个代码,
public class refre
{
final Timer timers = new Timer();
final Handler handler = new Handler();
public void trig(){
TimerTask task = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
new activityIns().execute();
}
});
}
};
timers.schedule(task, 1000, 10000);
}
}
并在此处调用refre
课程:
private refre refresher = new refre();
void onStoper(){
refresher.timers.cancel();
super.onStop();
}
如何调用"任务"在onStoper
内?
答案 0 :(得分:0)
一种可能的解决方法是使用专用方法取消任务:
public class Refre
{
final Timer timers = new Timer();
final Handler handler = new Handler();
private TimerTask task;
public void trig(){
task = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
new activityIns().execute();
}
});
}
};
timers.schedule(task, 1000, 10000);
}
public void cancelTask() {
timers.cancel(); // assuming http://developer.android.com/reference/java/util/Timer.html
}
}
然后:
private Refre refresher = new Refre();
void onStoper(){
refresher.cancelTask();
super.onStop();
}
答案 1 :(得分:0)
您的变量是本地变量。这意味着你不能在你所在的街区之外的任何地方使用。
要解决您的问题,您显然可以将TimerTask保存在refre
类的公共或私有变量中。 (当你私有化时,也要确保创建一个getter。)
但是,在您的情况下,我假设您可以轻松地从onTrig()
返回TimerTask,以便在onStopped()
中使用它。
我希望这有帮助!
PS:编写代码并共享代码时,应遵循Java约定。这些约定描述了类名应始终以大写字母开头。
答案 2 :(得分:0)
task
在trig()
方法中声明,因此只能在此方法的范围内访问。它被称为局部变量花一点时间来了解有关范围的更多信息,访问task
它应该至少在课堂上使用public modifier声明(同时请注意,这是一个不好的做法,你应该将其设为私有并使用getter访问类中的任何变量。
顺便说一下,在描述班级名称时,你应该使用第一个大写字母。看看Java代码约定:Code Conventions at Oracle website