通过意图开始新活动,有时有时不工作

时间:2016-09-01 15:04:27

标签: android android-intent android-activity onclick onclicklistener

假设我有两个活动,我想从一个跳到另一个。我可以用两种方式做到这一点:

1)直接,简单的通过 2)按下主要活动中的按钮

两种情况的区别在于我放置intent定义。在第一种情况下,onCreate方法中的任何位置;在第二种情况下,在onClickListener回调中。这两种情况的代码简单如下:

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
        Button btnStart = (Button) findViewById(R.id.btnDisplay);

/*      Intent intent = new Intent(MainActivity.this, DrawingActivity.class);
        startActivity(intent);
        finish();*/

        btnStart.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent intent = new Intent(MainActivity.this, DrawingActivity.class);
            startActivity(intent);          
            finish();

        }

        });

      }

    }

对我而言,两种情况都没有实质性差异。但是,当我从按钮开始第二个活动时,我的应用程序总是崩溃(检查logcat,似乎我用来绘制相机预览的表面纹理中有一个nullpointer)。如果我使用第一种方法启动第二个活动,一切正常,告诉我第二个活动没问题,问题在于我定义意图的方式。

有什么区别?为什么当我在按钮内调用第二个活动时,我的应用程序崩溃,如果我直接调用它,这种情况就不会发生?

希望我能解释自己,

感谢

1 个答案:

答案 0 :(得分:0)

在活动上调用finish()时,执行方法onDestroy()此方法可以执行以下操作:

  1. 关闭活动管理的所有对话框。
  2. 关闭活动管理的所有游标。
  3. 关闭所有打开的搜索对话框

    用此更新您的信息:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    Button btnStart = (Button) findViewById(R.id.btnDisplay);
    btnStart.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this,  DrawingActivity.class);
        startActivity(intent);          
        // no use of finish(); here
        }
      });
    }