Android:在Activity.onPause()之后单击事件

Mar*_*usz 10 android activity-lifecycle

有两个按钮,按钮A使用简单的Activity.startActivity()方法在其onClickListener中启动另一个活动,按钮B在其onClickListener中执行其他一些工作.

当我单击按钮B并紧接在按钮A之后,然后启动新活动,触发旧活动的onPause()生命周期事件,但是触发第二个按钮的onClick事件,但是在Activity.onPause()之后导致某些状态我的应用程序中的不一致.

有没有办法阻止触摸/点击事件在onPause()之后传递而不使用isPaused标志?

**编辑:**我的代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button buttonA = (Button) findViewById(R.id.activity_button);
        buttonA.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, TestActivity.class));
            }
        });

        Button buttonB = (Button) findViewById(R.id.log_button);
        buttonB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("TEST", "onClick");
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e("TEST", "onPause");
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,如果你足够快,并在按钮A后面点击按钮B,那么在onPause之后会触发B的onClick.

Mar*_*usz 2

使用 ViewModel + 生命周期感知的 LiveData 可以轻松解决整个概念,其中 LiveData 仅在允许时才向 UI 层公开事件。