【问题标题】:What's a "nice" way of stopping a (linear) runnable in case of activity switch?在活动切换的情况下停止(线性)可运行的“好”方法是什么?
【发布时间】:2017-02-09 15:54:41
【问题描述】:

我有一个线程会做一些处理,然后有可运行的代码将结果显示在屏幕上。问题是,如果用户在可运行对象位于两行显示代码之间时按下后退箭头,则下一行将崩溃,因为 Activity 不再存在。

下面的代码实现了目标,但我讨厌在每一行之前都有if 语句。有没有更好的办法?

@Override
 public void onBackPressed() {
    super.onBackPressed();
    imgThread.interrupt();
}

private void processImage(){
        final Handler mHandler = new Handler(Looper.getMainLooper());

        progress = new ProgressDialog(this);
        progress.setMessage("TEXT");
        progress.setIndeterminate(true);
        progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progress.show();

        imgThread = new Thread(){
            @Override
            public void run() {

                //Process the image a bit

                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        if(!imgThread.isInterrupted())
                        imageView.setImageBitmap(mDisplayBitmap);
                        if(!imgThread.isInterrupted())
                        progress.setMessage("TEXT TEXT");
                        if(!imgThread.isInterrupted())
                        progress.show();
                    }
                });

                //More processing

                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        if(!imgThread.isInterrupted())
                        addScreenListener();
                        if(!imgThread.isInterrupted())
                        determineHelpToast("TEXT TEXT TEXT", Toast.LENGTH_LONG);
                        if(!imgThread.isInterrupted())
                        progress.dismiss();
                    }
                });

            }
        }; imgThread.start();
    }

【问题讨论】:

    标签: java android multithreading runnable


    【解决方案1】:

    真正安全的方法是修改您的 Runnable,使其永远不会引用 Android 上下文(Activity 等)。

    最简单的方法是通过事件总线将更改传达给 Activity。

    【讨论】:

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