我一直以为在activity中执行finish后,会直接关闭该acitivy剩下的方法,以至于每次都将要调用的方法都写在了finish之前。
下面讲写一个小demo来证明finish后是怎么跳转的。流程是MainActivity中点击按钮后跳转掉AActivity
MainActivity页面:
public class MainActivity extends Activity {
private static String TAG = MainActivity.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.setClass(MainActivity.this, AActivity.class);
startActivity(i);
Log.e(TAG,"before finish");
finish();
for(int j=0;j<10;j++)
Log.e(TAG,j+"~~~~");
Log.e(TAG,"after finish");
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.e(TAG,"onDestroy");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.e(TAG,"onPause");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.e(TAG,"onStop");
}
}
运行图:
点击aaa按钮,然后跳转到AActivity
public class AActivity extends Activity{
private static String TAG = AActivity.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Log.e(TAG,"onCreate");
}
}
打印log:
你会发现要等到finish后面的都执行完后,然后跳转到AActivity,然后在执行mainActivity中的onPause等方法。
懂了吧,哈哈。