6

覆盖活动的 ondestroy 时,我应该在 super.onDestroy() 之前还是之后放置命令?

protected void onDestroy() {

    //option 1: callback before or ...

    super.onDestroy();

    //option 2: callback after super.onDestroy();
}

(现在我担心:如果 super.onDestroy 太快,它永远不会到达选项 2。)

4

6 回答 6

7

任何可能与使用活动资源相关的内容都应该在调用super.onDestroy(). 它之后的代码将被访问,但如果它需要这些资源可能会导致问题。

于 2012-10-12T12:37:28.250 回答
4

将您的代码放在super.onDestroy();例如:

protected void onDestroy() {
    super.onDestroy();

    // Put code here.

}

覆盖该方法时,您的代码将完成执行。

于 2012-10-12T12:42:23.113 回答
3

这就是调用 super.onDestroy(); 时发生的情况;

安卓源

protected void onDestroy() {
    mCalled = true;

    // dismiss any dialogs we are managing.
    if (mManagedDialogs != null) {

        final int numDialogs = mManagedDialogs.size();
        for (int i = 0; i < numDialogs; i++) {
            final Dialog dialog = mManagedDialogs.valueAt(i);
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    }

    // also dismiss search dialog if showing
    // TODO more generic than just this manager
    SearchManager searchManager = 
        (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchManager.stopSearch();

    // close any cursors we are managing.
    int numCursors = mManagedCursors.size();
    for (int i = 0; i < numCursors; i++) {
        ManagedCursor c = mManagedCursors.get(i);
        if (c != null) {
            c.mCursor.close();
        }
    }
}

Essentially this means that it does not matter if you call it before or after your code.

于 2012-10-12T14:02:08.743 回答
1

调用 super.onDestroy 不会中断调用线程或类似的东西。无论你把它放在哪里,在 super.onDestroy 之前或之后,你的代码都会被执行。

super.onDestroy 将仅释放框架可能为此活动引用的资源(例如系统对话框和托管游标)

我建议您查看此链接以获取更多详细信息

http://developer.android.com/reference/android/app/Activity.html#onDestroy()

于 2012-10-12T12:56:42.717 回答
0

这取决于。如果您希望在super函数之后应用您的操作,您应该将您的函数放在超级之后。我想你必须了解superfirst的用法。例如,看看这个问题

于 2012-10-12T12:39:59.193 回答
0

它将到达选项 2。 onDestroy() 实际上并没有销毁对象。在超类的 onDestroy() 运行并返回后,您的实例仍然存在。

编辑:这是 onDestroy 按顺序执行的操作:

  • 关闭活动正在管理的任何对话框。
  • 关闭活动正在管理的所有游标。
  • 关闭任何打开的搜索对话框
于 2012-10-12T12:42:40.977 回答