我正在开发Android应用程序一段时间,并且关注了很多关于活动生命周期和应用程序生命周期的帖子.
我知道Activity.finish()方法调用的方法Activity.onDestroy(),并从堆栈中删除活动,我想它以某种方式指向操作系统和垃圾收集器,他可以"做他的把戏"并释放内存,当它发现它是一个很好的时间做所以....
我来到这篇文章 - 退出申请不赞成?并阅读Mark Murphy的回答.
这让我对这个finish()方法究竟是做什么感到困惑.
我有机会打电话finish(),onDestroy()不会打电话吗?
我想从onCreate方法内部完成一个活动.当我打电话时finish(),onDestroy()没有立即调用,代码不断流过finish().onDestroy()直到onCreate()结束括号后才调用.
根据onCreate()developer.android.com/reference上的说明.
您可以在此函数中调用finish(),在这种情况下,将立即调用onDestroy(),而不执行任何其余的活动生命周期(onStart(),onResume(),onPause()等).
我问的原因是:我想检查传递给Bundle的数据onCreate().当然我可以控制传递的内容onCreate,但我仍然认为应该在交付时进行检查.
我的代码包含class A,它启动Activity B.我认为不应该调用最后两个"if of clause子句"标签,因为语句中的finish方法if应该销毁了活动.它与if子句无关,因为第二次finish()调用后的标记行仍然被读取.
我的代码:
A级
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// goToBButton: when pressed sends message to class B.
Button goToBButton = (Button)this.findViewById(R.id.go_to__b_btn);
goToBButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick (View v) {
Log.i(TAG,"A Class: goToBButton, onClick");
Intent i = new Intent(A.this, B.class);
startActivityForResult(i,REQ_TO_B);
} …Run Code Online (Sandbox Code Playgroud) 我在打电话,finish()但我的活动一直在继续.
我有一个活动,由主活动屏幕中的菜单调用.在我的activity的onCreate()方法中,我有以下代码片段:
// Make sure there are some events in the list.
if (theEventArrayList.isEmpty()){
Toast.makeText(this, "Event List is empty", Toast.LENGTH_LONG).show();
finish();
}
SummarizeCurrentEvent();
graphEvents();
Run Code Online (Sandbox Code Playgroud)
如果列表为空,则会显示Toast,我可以在调用时设置断点finish().如果我从调试器中的那个步骤开始直接进入SummarizeCurrentEvent().我以为finish()会退出活动.这不是这种情况吗?我在哪里可以找到有关此方法的更多信息?
朋友在我的活动中,我已经放入了finish()内部onBackpressed(),但有时它还没有完成或破坏活动..问题是什么?
关于this.finish()究竟是什么,我有点朦胧.具体来说,我只是在一个活动中编写了以下代码行:
this.finish();
Globals gs = (Globals) getApplication();
gs.MainActivity.finish();
Run Code Online (Sandbox Code Playgroud)
该代码旨在关闭当前活动并关闭应用程序的核心活动.而且效果很好.但是,我很想知道......显然当前的活动在第一行执行后并没有完全结束.如果我要调用this.finish()然后开始一些复杂的计算呢?
我的问题是:当我调用this.finish()时,我的Activity什么时候被删除?
我刚刚在
Intent wizard = new Intent();
wizard.setClass(this, A.class);
wizard.putExtra("Domain", A.getInstance().B);
startActivity(wizard);
finish();
Run Code Online (Sandbox Code Playgroud)
为什么要在这里调用 finish() 方法?它的目的是什么?
如果我们调用acitivty.finish()并且下面有一些代码行.一旦调用了finish(),它会被执行吗?还是忽略了?