0

我有两个活动 MainActivity 和 SecondActivity。MainActivity 有一个按钮,当我点击它时,我会转到 SecondActivity,在这个活动中,我在一个单独的线程中进行一些数学计算(执行此计算所需的代码非常大,有 100 个类),当计算是完成后,我在 Textview 中显示结果。当用户单击后退按钮时,它会返回 MainActivity,直到此刻一切都很好,但是当我在 android studio 中分析代码时,我发现保留了许多计算函数的类,例如静态变量、枚举等为了解决这个问题,我试图删除一些静态变量,通过这种方法我减少了保留的代码量,但我不能再进一步了。有没有办法解决这个问题,所以当我点击返回按钮时,

public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_activity);

            Button button = findViewById(R.id.button);
            button.setOnClickListener(v -> {
                Intent intent = new Intent(this, SecondActivity.class);
                startActivity(intent);
            });
        }
    }

public class SecondActivity extends AppCompatActivity {

        private final Handler mHandler = new Handler(Looper.getMainLooper());
        private TextView mTextView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_activity);

            mTextView = findViewById(R.id.textview);

            Thread thread = new Thread(() -> {
                String result = calculate();
                displayResult(result);
            });
            thread.start();
        }

        String calculate(){
            //pure java code
            //Very complex math operation with 100 of classes
            return "result";
        }

        public void displayResult(String result){
            mHandler.post(() -> {
                mTextView.setText(result);
            });
        }
    }
4

2 回答 2

0

单独的线程保留对SecondActivity实例的引用(this.displayResult(result)在结束时调用calculate())。退出活动时,您需要显式终止线程。

于 2021-03-24T22:30:14.480 回答
0

我没有尝试过,但我认为这会奏效。

    @Override
    public void onBackPressed(){
        Intent intent = new Intent(this, FirstActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
        Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(intent);
        SecondActivity.this.finish(); // if the activity running has it's own context
    }
于 2021-03-20T01:45:07.320 回答