2013-04-18 5 views
6

Я использовал опубликованный методDelayed, чтобы обновить мою активность, которая отлично работает. Но проблема в том, что даже при нажатии кнопки Назад postdelayed вызов методы назад предыдущая активность ..Как убить метод PostDelayed в Android

// Обработчик 30000 миллей-ИКСА после задержки освежения активности

mHandler.postDelayed(new Runnable() { 
public void run() { 
       dostuff(); 

     } 
      }, 30000); 
    } 

protected void dostuff() { 
Intent intent = getIntent(); 
finish();startActivity(intent); 
Toast.makeText(getApplicationContext(), "refreshed", Toast.LENGTH_LONG).show(); 
} 

public void onBackPressed() { 
     super.onBackPressed(); 
     finish(); 
     mHandler.removeCallbacks(null); 
     } 

protected void onStop() { 
      mHandler.removeCallbacks(null); 
     super.onStop(); 
    } 
+1

http://stackoverflow.com/q/16050807/931982 .. дублируют вашего собственного вопроса .. Не делайте этого – stinepike

ответ

2

обходного путем для этого is:

При выполнении метода dostuff() просто проверьте, действительно ли Activity.isFinising() и do. Если он заканчивается, просто вернитесь.

Когда вы вернетесь, действие завершится, и после этого, если doStuff() выполнит, он ничего не сделает.

1

mHandler.removeCallbacks (null) ;. Вы передаете значение null в качестве параметра. Передайте Runnable onject. Это должно сработать.

public final void removeCallbacks (Runnable r) 

Используйте приведенное выше.

Добавлено в API level 1 Удалите все ожидающие сообщения Runnable r, которые находятся в очереди сообщений.

http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29

Edit: Пример

Runnable runnable = new Runnable() { 
@Override 
public void run() { 
    // execute some code 
} 
}; 

Handler handler = new Handler(); 
handler.postDelayed(runnable, 10000); 
handler.removeCallbacks(runnable); 
+2

Это должен быть конкретный экземпляр «Runnable», который был создан. – dmon

+0

@dmon согласился, я отредактировал свой ответ – Raghunandan

6

вы просто использовать это может быть поможет вам

Runnable runobj=new Runnable() { 
public void run() 
{ 
dostuff(); 

} 
    }; 
mHandler.postDelayed(runobj, 30000); 
    } 
public void onBackPressed() 
{ 
super.onBackPressed(); 
mHandler.removeCallbacks(runobj); 
}