首页 > 代码库 > Stopping and Restarting an Activity

Stopping and Restarting an Activity

适当的停止和重新启动你的活动是activity生命周期的重要流程,它确保您的用户知道app时活着的而且不会丢失进程。有一些关键的场景你的activity会停止和重新启动:

1.用户打开最近的app窗口并从你的app切换到另一个app。目前的activity在你app的前台停止状态。如果用户点击图标返回你的app或从最近的app窗口返回,该活动将重新启动。

2.用户在你的app中执行了一个动作开启了一个新的activity,当第二个activity被创建后,当前的activity会停止。如果用户按下后退按钮,第一个activity会重新启动。

3.用户在使用你的app时接到了一个电话

activity类提供了两个生命周期方法,onStop()和onRestart(),它允许您专门处理你的活动如何处理被停止并重新启动。与暂停的状态不同,停止状态保证UI不再是可见的并且用户的焦点与activity是分开的(或一个完全独立的app)。

技术分享

图解:当用户离开你的activity,系统调用onStop()(1)停止activity。如果用户在你的activity是stopped状态时返回,系统调用onRestart()(2),紧接着onStart()(3)和onResume()(4)。请注意,无论什么情况导致活动停止,系统总是在onStop()之前调用onPause()。

 

停止你的Activity


当你的activity调用onStop()方法,它不再是可见的而且应该释放几乎所有资源当用户不再使用它。一旦你的活动停止,如果需要恢复系统内存,系统可能会破坏实例。在极端的情况下,系统可能会简单地杀死你的app不通过调用onDestroy()方法,所以重要的是你使用onStop()来释放资源,否则可能会造成内存泄漏。

尽管onPause()方法是在onStop()之前被调用,你也应该使用onStop()来执行更大、更多的CPU密集型关闭操作,如将信息写入数据库中。

 

举例来说,这里实现了onStop()方法来保存草稿的内容:

@Override

protected void onStop() {

    super.onStop();  // Always call the superclass method first

    // Save the note‘s current draft, because the activity is stopping

    // and we want to be sure the current note progress isn‘t lost.

    ContentValues values = new ContentValues();

    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());

    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle()); 

    getContentResolver().update(

            mUri,    // The URI for the note to update.

            values,  // The map of column names and new values to apply to them.

            null,    // No SELECT criteria are used.

            null     // No WHERE columns are used.

            );

}

 

 

 

 

Stopping and Restarting an Activity