【发布时间】:2019-08-21 13:59:52
【问题描述】:
我是安卓开发新手。我开发了一个应用程序来设置直播 壁纸和壁纸将根据用户选择的时间间隔改变 落下。我已经使用 WallpaperService 来实现这一点。处理程序 runnable 用于设置壁纸和 handler.postDelayed(runnable, WALLPAPER_DURATION);用于触发 更改所选间隔的墙纸。问题是壁纸 当用户更改为另一个时,旋转第一个选定的时间间隔 间隔说从5分钟到10分钟,壁纸应该每换一次 10 分钟,但我的代码仍在更改 5 分钟。我能够得到 用户更改了服务的时间间隔,但我无法杀死 可在 handler.postDelayed 中运行。我用过
handler.removeCallbacks(drawRunner); handler.removeCallbacksAndMessages(null);但有帮助。我想要 使用新的延迟时间(间隔)杀死或更新可运行对象。
Runnable drawRunner = new Runnable() {
@Override
public void run() {
System.out.println("TIMER SCHEDULED "+WALLPAPER_DURATION);
drawFrame();
incrementCounter();
}
};
public MyWallpaperEngine() {
System.out.println("MyWallpaperEngine ");
mImagesArray = new int[] {R.drawable.one,R.drawable.two,R.drawable.three,
R.drawable.four,R.drawable.five,R.drawable.six,
R.drawable.seven,R.drawable.eight,R.drawable.nine,
R.drawable.ten};
handler.post(drawRunner);
}
private void incrementCounter() {
mImagesArrayIndex++;
if (mImagesArrayIndex >= mImagesArray.length) {
mImagesArrayIndex = 0;
}
}
private void drawFrame() {
System.out.println("inside draw frame");
SurfaceHolder holder = getSurfaceHolder();
System.out.println("holder Object " + holder);
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
System.out.println("Canvas Object " + canvas);
if (canvas != null) {
System.out.println("inside draw image");
drawImage(canvas);
}
} finally {
if (canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
handler.postDelayed(drawRunner, WALLPAPER_DURATION);
if(clearHandler){
System.out.println("inside remove callbacks");
handler.removeCallbacks(drawRunner);
handler.removeCallbacksAndMessages(null);
clearHandler=false;
}
}
@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
System.out.println("onSurfaceDestroyed is called");
super.onSurfaceDestroyed(holder);
//handler.removeCallbacks(drawRunner);
//handler.removeCallbacksAndMessages(null);
}
private void drawImage(Canvas canvas)
{
Bitmap image = BitmapFactory.decodeResource(getResources(),
mImagesArray[mImagesArrayIndex]);
Bitmap b=Bitmap.createScaledBitmap(image, canvas.getWidth(), canvas.getHeight(), true);
canvas.drawBitmap(b, 0,0, null);
}
public void onDestroy(){
super.onDestroy();
// handler.removeCallbacks(drawRunner);
// handler.removeCallbacksAndMessages(null);
}
}
【问题讨论】:
标签: android intervals android-handler wallpaper live-wallpaper