編輯:關於Android編程
先占個位置,下次翻譯~ :p
Properly stopping and restarting your activity is an important process in the activity lifecycle that ensures your users perceive that your app is always alive and doesn't lose their progress. There are a few of key scenarios in which your activity is stopped and restarted:
The Activity
class provides two lifecycle
methods, onStop()
and onRestart()
,
which allow you to specifically handle how your activity handles being stopped and restarted. Unlike the paused state, which identifies a partial UI obstruction, the stopped state guarantees that the UI is no longer visible and the user's focus is in a separate
activity (or an entirely separate app).
Note: Because the system retains your Activity
instance
in system memory when it is stopped, it's possible that you don't need to implement the onStop()
and onRestart()
(or
even onStart()
methods at
all. For most activities that are relatively simple, the activity will stop and restart just fine and you might only need to useonPause()
to
pause ongoing actions and disconnect from system resources.
When your activity receives a call to the onStop()
method,
it's no longer visible and should release almost all resources that aren't needed while the user is not using it. Once your activity is stopped, the system might destroy the instance if it needs to recover system memory. In extreme cases, the system might
simply kill your app process without calling the activity's final onDestroy()
callback,
so it's important you use onStop()
to
release resources that might leak memory.
Although the onPause()
method
is called before onStop()
,
you should use onStop()
to
perform larger, more CPU intensive shut-down operations, such as writing information to a database.
For example, here's an implementation of onStop()
that
saves the contents of a draft note to persistent storage:
@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. ); }
When your activity is stopped, the Activity
object
is kept resident in memory and is recalled when the activity resumes. You don’t need to re-initialize components that were created during any of the callback methods leading up to the Resumed state. The system also keeps track of the current state for each View
in
the layout, so if the user entered text into an EditText
widget,
that content is retained so you don't need to save and restore it.
Note: Even if the system destroys your activity while it's stopped, it still retains the state of the View
objects
(such as text in an EditText
) in
a Bundle
(a blob of key-value pairs) and
restores them if the user navigates back to the same instance of the activity (the next lesson talks
more about using a Bundle
to save other
state data in case your activity is destroyed and recreated).
When your activity comes back to the foreground from the stopped state, it receives a call to onRestart()
.
The system also calls the onStart()
method,
which happens every time your activity becomes visible (whether being restarted or created for the first time). The onRestart()
method,
however, is called only when the activity resumes from the stopped state, so you can use it to perform special restoration work that might be necessary only if the activity was previously stopped, but not destroyed.
It's uncommon that an app needs to use onRestart()
to
restore the activity's state, so there aren't any guidelines for this method that apply to the general population of apps. However, because your onStop()
method
should essentially clean up all your activity's resources, you'll need to re-instantiate them when the activity restarts. Yet, you also need to instantiate them when your activity is created for the first time (when there's no existing instance of the activity).
For this reason, you should usually use the onStart()
callback
method as the counterpart to the onStop()
method,
because the system calls onStart()
both
when it creates your activity and when it restarts the activity from the stopped state.
For example, because the user might have been away from your app for a long time before coming back it, theonStart()
method
is a good place to verify that required system features are enabled:
@Override protected void onStart() { super.onStart(); // Always call the superclass method first // The activity is either being restarted or started for the first time // so this is where we should make sure that GPS is enabled LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if (!gpsEnabled) { // Create a dialog here that requests the user to enable GPS, and use an intent // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action // to take the user to the Settings screen to enable GPS when they click "OK" } } @Override protected void onRestart() { super.onRestart(); // Always call the superclass method first // Activity being restarted from stopped state }
When the system destroys your activity, it calls the onDestroy()
method
for your Activity
. Because you should
generally have released most of your resources with onStop()
,
by the time you receive a call to onDestroy()
,
there's not much that most apps need to do. This method is your last chance to clean out resources that could lead to a memory leak, so you should be sure that additional threads are destroyed and other long-running actions like method tracing are also stopped.
這段時間的自定義View學習,學會了繪制柱狀圖、繪制折線圖、繪制進度控件,那我們今天就來聊聊另外一種自定義的View,這就是我們常見的七日年化收益折線圖效果。先看看長什麼
ViewRoot和DecorViewViewRoot對應於ViewRootImpl類,是連接WindowManager和DecorView的紐帶,View的三大流程均是通
兩行代碼,用最簡單的方式來實現Android視圖擴散切換效果。一、概述這兩天時間動手撸了個視圖擴散切換效果的控制器,API兼容至Android4.0,更方便我們在視圖切
歡迎大家關注Android開源網絡框架NoHttp:https://github.com/yanzhenjie/NoHttp 我們在實際開發中,很多App都