アンドロイドのSplashActivityのトリック

我々はすべて知っているように、私たちのアプリケーションの多くは、過入力してアプリケーション・インターフェースを最初に使用SplashActivityを、持っているロゴ情報を表示します。以下に示すように、それは私です、簡単な天候 SplashActivityの。



しかし、その役割は、単にロゴ情報を表示するには?これはあまりにも無駄ではないですか?答えはイエスです。

実際には、アンドロイドを学ぶために時間の初め、私もその役割は唯一のロゴ情報を表示するために使用されていると思いますが、新浪微博、テンセントWeiboや他のアプリケーションを観察した後、私は、すべての時間表示は、このインタフェースが異なるものになることがわかりましたネットワークは時間が少し長く滞在するとき、それは良い、悪いネットワークで感じることはありませんので、私は確かに言うことができます:内部のこの活動では、確かにそれは事前に初期化され、次の活動の出現のための基礎を築きますいくつかのツールは、必要なデータをロードします。この場合、次の活動はすぐに、より良いユーザーエクスペリエンスを取得し、利用者の目の前に表示されているすべてのデータを完了することができるようになります。

ここでは、おそらくいくつかは、実際には、これは私のようにも、可能である、ああ、その後、MainActivityに直接行く私は、アプリケーションでこれらの事を行うことができ、子供の靴を言うシンプルな天気が最初にちょうどそれをしたが、気配りの友人私は内部のデータをロードするアプリケーションで物事を入れているので、実際には、いくつかの時間のために、特により明白に初めてのスクリーン黒アプリケーションを入力し、2,000人以上の都市をロードするたびに、いくつかを取ることがわかります時間。これは必然的に黒のいくつかの時間のために、そのユーザーとそうでないプロに感じるでしょう。


OK、ここに取得する道を切り開いて、ここのは、この単純なSplashActivityを見てみましょう、本題に:

/**
 * 
 * @author way 
 * 预先加载数据的SplashActivity
 * 
 */
public class SplashActivity extends Activity {
	private static final int SHOW_TIME_MIN = 3000;// 最小显示时间
	private long mStartTime;// 开始时间

	private Handler mHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case Application.CITY_LIST_SCUESS:// 如果城市列表加载完毕,就发送此消息
				long loadingTime = System.currentTimeMillis() - mStartTime;// 计算一下总共花费的时间
				if (loadingTime < SHOW_TIME_MIN) {// 如果比最小显示时间还短,就延时进入MainActivity,否则直接进入
					mHandler.postDelayed(goToMainActivity, SHOW_TIME_MIN
							- loadingTime);
				} else {
					mHandler.post(goToMainActivity);
				}
				break;
			default:
				break;
			}
		}
	};
	//进入下一个Activity
	Runnable goToMainActivity = new Runnable() {

		@Override
		public void run() {
			SplashActivity.this.startActivity(new Intent(SplashActivity.this,
					MainActivity.class));
			finish();
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.splash);
		mStartTime = System.currentTimeMillis();//记录开始时间,
		Application.getInstance().initData(mHandler);//开始加载数据
	}
}

私はいくつかのデータベースファイルをコピーしません、このような具体的にこの関数は、データをロードするために言っていない都市、のデータベースのリストのような比較的時間のかかるもののいくつかを読んで、内部ここでアプリケーションにデータをロードする機能を持っています。私たちは、このような非同期データを交換するネットワークを要求するマイクロブログアプリケーションなど、さまざまなニーズに応じて機能を変更することができますので。私は、この例では、唯一のアイデアの拡張であるあなたが持っている場合は、より良い提案や批判は、私にメッセージを与えるために歓迎されています。






ます。https://my.oschina.net/cjkall/blog/195781で再現

おすすめ

転載: blog.csdn.net/weixin_34384915/article/details/91756535