【问题标题】:How to drawing bitmap in runnable?如何在runnable中绘制位图?
【发布时间】:2021-03-16 14:51:52
【问题描述】:

我想在 runnable 中绘制位图但不工作。 该代码给出了应用程序的退出错误。 我在代码中注释了非工作部分。

 private Runnable updateTimerThread = new Runnable() {

        public void run() {


                // This code block dont run. Application exit error.
                bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas(bitmap);
                paint = new Paint(Paint.ANTI_ALIAS_FLAG);
                paint.setColor(Color.RED);
                rect = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());
                canvas.drawArc(rect, 0F, 360F, true, paint);
                imageView.setImageBitmap(bitmap);
                imageView.invalidate();

                customHandler.postDelayed(this, showTime);
   

                timeSwapBuff += timeInMilliseconds;
                customHandler.removeCallbacks(updateTimerThread);
            
         }
    };

【问题讨论】:

  • “不要跑”是什么意思?你真的调用了这段代码来运行吗?您是否将此Runnable 的实例提交给执行器服务?
  • 这段代码在 protected void onCreate(Bundle savedInstanceState) { } 中正常运行。但是这段代码不能在私有 Runnable updateTimerThread = new Runnable() { } 中运行。我尝试但程序给出应用程序退出错误。我想在 Runnable 中绘制位图。

标签: java android bitmap draw runnable


【解决方案1】:

将您的Runnable 提交给ExecutorService

你的问题不清楚。但是,按照您的书面问题,我猜您忽略了调用显示的代码。 Runnable 不会神奇地执行自己。您必须将 Runnable 的实例提交给执行器服务。

给定变量名称updateTimeThread,我猜你希望这段代码在后台线程上重复运行。所以我们需要一个定时执行器服务来重复运行。

这个名字让你有些困惑。 Runnable 不是一个线程。 Runnable 是由 ExecutorService 在其托管线程之一上执行的任务。

让我们定义一个更简单的 runnable 来启动和运行一些基本代码。

Runnable task = new Runnable() {
    public void run() {
        System.out.println( "Running the run method at " + Instant.now() ) ;
    }
}

建立你的执行者服务。

ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor() ;

提交您的 Runnable 实例,以便每隔一段时间运行一次。

long delay = 0 ; 
long period = 1 ;
ses.scheduleAtFixedRate( task , delay , period , TimeUnit.SECONDS ) ;

请务必最终关闭您的执行程序服务。否则它的后备线程池可能会无限期地继续运行,就像僵尸一样?‍♂️。

与几乎所有的 GUI 工具包一样,在 Android 中从不从后台线程访问 UI 小部件。在后台线程上进行计算。但是当需要更新 UI 时,请使用提供的任何机制来要求 UI 线程运行一些代码来更新 UI 小部件。 (我不知道Android的机制。)

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多