Android 使用墙纸服务根据用户选择的频率设置墙纸

Android 使用墙纸服务根据用户选择的频率设置墙纸,android,intervals,frequency,live-wallpaper,Android,Intervals,Frequency,Live Wallpaper,我正在使用墙纸服务在主屏幕上设置实时墙纸。我可以从资源中设置10张图片并进行轮换, 基于静态频率使用线程。我希望用户提供选择多个频率的选项。我试图用用户选择的频率传递线程睡眠持续时间。但是正在运行的线程既没有停止也没有更新值。 它将使用以前选择的频率更新墙纸。3周以来,我一直在不同程度上使用这个应用程序。我尝试过墙纸管理器和设置服务位图,报警管理器,但都停止设置墙纸后,一定时间。所以最后使用墙纸服务。帮助克服这个问题 class WallpaperEngine extends Engine {

我正在使用墙纸服务在主屏幕上设置实时墙纸。我可以从资源中设置10张图片并进行轮换,
基于静态频率使用线程。我希望用户提供选择多个频率的选项。我试图用用户选择的频率传递线程睡眠持续时间。但是正在运行的线程既没有停止也没有更新值。
它将使用以前选择的频率更新墙纸。3周以来,我一直在不同程度上使用这个应用程序。我尝试过墙纸管理器和设置服务位图,报警管理器,但都停止设置墙纸后,一定时间。所以最后使用墙纸服务。帮助克服这个问题

class WallpaperEngine extends Engine {
    //frequency selected by user to update the wallpaper
    private final int Wallpaper_DURATION = utils.getFrequency;

    private int[] mImagesArray;
    private int mImagesArrayIndex = 0;
    private Thread mDrawWallpaper;

    public WallpaperEngine() {
        customWallpaperHelper = new CustomWallpaperHelper(getApplicationContext(), getResources());
        mImagesArray = new int[] {R.drawable.one,R.drawable.two,R.drawable.three,R.drawable.four,R.drawable.five};

        mDrawWallpaper = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    while (true) {
                        drawFrame();
                        incrementCounter();
                        Thread.sleep(Wallpaper_DURATION);
                    }
                } catch (Exception e) {
                    //
                }
            }
        });

        mDrawWallpaper.start();
    }

    private void incrementCounter() {
        mImagesArrayIndex++;

        if (mImagesArrayIndex >= mImagesArray.length) {
            mImagesArrayIndex = 0;
        }
    }

    private void drawFrame() {
        final SurfaceHolder holder = getSurfaceHolder();

        Canvas canvas = null;

        try {
            canvas = holder.lockCanvas();

            if (canvas != null) {
                drawImage(canvas);
            }
        } finally {
            if (canvas != null) {
                holder.unlockCanvasAndPost(canvas);
            }
        }
    }

    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);
    }

我们可以看看
utils.getFrequency
的样子吗?然而,线程
mDrawWallpaper
没有被终止的地方。所以你可能会在用户更改间隔选项时创建新实例。这正是我想要知道的终止线程的位置。Utils.getFrequency只是一个字段,我用它来更新用户选择的从活动到服务的时间间隔。它在用户更改时得到更新。我们可以看看
utils.getFrequency
的样子吗?然而,线程
mDrawWallpaper
没有被终止的地方。所以你可能会在用户更改间隔选项时创建新实例。这正是我想要知道的终止线程的位置。Utils.getFrequency只是一个字段,我用它来更新用户选择的从活动到服务的时间间隔。当用户更改时,它会得到更新。