我在以下程序中使用处理程序,我想在i = 5时停止它,但处理程序不会停止并连续运行.
b1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
handler = new Handler();
runnable = new Runnable() {
public void run() {
try {
Toast.makeText(getApplicationContext(), "Handler is working", Toast.LENGTH_LONG).show();
System.out.print("Handler is working");
if(i==5){
//Thread.currentThread().interrupt();
handler.removeCallbacks(runnable);
System.out.print("ok");
Toast.makeText(getApplicationContext(), "ok", Toast.LENGTH_LONG).show();
}
i++;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.postDelayed(this, 5000);
}
};
handler.postDelayed(runnable, 5000);
//return;
}
});
Run Code Online (Sandbox Code Playgroud) 如您所见,我有这个PlayLesson_01活动,它同时显示图像和音频.此活动有两个处理程序,一个用于控制图像和音频,另一个将完成课程并返回上一个活动(课程菜单).
目标:单击硬后退按钮返回上一个活动并停止播放图像和音频.
问题:当我点击"Back"时,我可以回到上一个活动,但音频仍在播放.我无法停止或杀死在活动中启动的处理程序.
问题:如何彻底杀死或停止这些处理程序?
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.ViewSwitcher.ViewFactory;
public class PlayLesson_01 extends Activity implements OnItemSelectedListener,
ViewFactory, Runnable {
// Setting up images
// Keeping all Images in array references to our images
public Integer[] mThumbIds = { …Run Code Online (Sandbox Code Playgroud) 首先,我知道如何创建Handler。
我正在开发一个项目,我正在Handler使用postDelayed. 有时,应用程序崩溃是因为Activity 被销毁并且处理程序内的任务在 Activity destroy 后执行。
我正在寻找 Handler 的替代方案,它可以在延迟后执行,并且它可以是生命周期感知的,这样应用程序就不会崩溃。
我知道如何取消处理程序(删除处理程序或取消活动的 onDestroy/onStop 方法内的处理程序),这里是相同的链接。但我并不是在寻找这些解决方案。如果可以的话,任何替代方案都将是更好的解决方案。
提前致谢!