次のようなアプリの要件に応じて、スプラッシュ スクリーンを使用できます。
1.データをダウンロードして保存する。2.jsonなどの解析
このためにメイン アクティビティをバックグラウンドで実行する場合は、AsyncTask または Service を使用する必要があります。
例えば
public class SplashScreen extends Activity {
String now_playing, earned;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
/**
* Showing splashscreen while making network calls to download necessary
* data before launching the app Will use AsyncTask to make http call
*/
new PrefetchData().execute();
}
/**
* Async Task to make http call
*/
private class PrefetchData extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// before making http calls
}
@Override
protected Void doInBackground(Void... arg0) {
/*
* Will make http call here This call will download required data
* before launching the app
* example:
* 1. Downloading and storing in SQLite
* 2. Downloading images
* 3. Fetching and parsing the xml / json
* 4. Sending device information to server
* 5. etc.,
*/
JsonParser jsonParser = new JsonParser();
String json = jsonParser
.getJSONFromUrl("http://api.androidhive.info/game/game_stats.json");
Log.e("Response: ", "> " + json);
if (json != null) {
try {
JSONObject jObj = new JSONObject(json)
.getJSONObject("game_stat");
now_playing = jObj.getString("now_playing");
earned = jObj.getString("earned");
Log.e("JSON", "> " + now_playing + earned);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// After completing http call
// will close this activity and lauch main activity
Intent i = new Intent(SplashScreen.this, MainActivity.class);//Here Main activity is the splash screen.
i.putExtra("now_playing", now_playing);
i.putExtra("earned", earned);
startActivity(i);
// close this activity
finish();
}
}
}
詳細については、スプラッシュ スクリーン、サービス、およびAsyncTaskで asynctask を使用する例を参照してください。
私があなたの要件を理解していれば、スプラッシュ画面で asynctask を使用する例を一度見てください。
上記のコーディングのプロセス:
- onCreate setContentView(R.layout.activity_splash); スプラッシュ画面を呼び出し、PrefetchData()が呼び出されます。
- prefetch()では、asynctask がバックグラウンド操作を実行し、ここで json が指定された URL から解析されます。
- onPostExecute()でMainActivity が呼び出されます。onPostExecute() は AsyncTask で使用され、バックグラウンド処理が終了したことを示すため、上記の例では、finish() 関数はスプラッシュ スクリーンの表示を終了します。
お役に立てば幸いです。