關於android啟動頁優化建議
android啟動頁優化
啟動頁也稱之為閃屏頁,就是在android應用第一次啟動時展現的頁面,但它並不是引導頁(一般是應用首次安裝或者更新的時候出現的頁面)。
啟動頁黑白閃爍:
在剛啟動應用時,往往會出現黑白閃屏現象,這是由於Them初始化預設顏色就是黑/白色,我們可以先給主題設定與啟動頁背景色相同的背景色,而啟動頁採用純背景+logo形式,而且logo大小不宜超過1M(防止oom),可先到tinypng網站對.png或.jpg格式圖片壓縮處理,這樣在專案啟動時就不會有黑/白閃屏了;
<style name="AppSplash" parent="android:Theme.Light.NoTitleBar"> <item name="android:windowBackground">@drawable/ic_launcher</item> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> </style>
延遲啟動之按back後自動啟動:
另外啟動頁後進入首頁的延遲,不管採用handler還是countDownTimer等,都需要在回退鍵方法onBackPressed()中取消掉延遲跳轉操作,這樣當用戶剛啟動app後直接按back鍵,而導致該app過會兒自動啟動問題;
其實這個介面的實現很簡單,程式碼量也很少,主介面程式碼:
public class Start1Activity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(StartActivity.this,MainActivity.class));
}
}, 3000);
}
}
這樣寫啟動頁,是存在很大的問題的
問題場景:當用戶誤點了你的應用圖示,想趕緊撤回去,於是點選了back鍵,過了幾秒鐘我在其他的應用瀏覽,突然跳轉到你的應用這種使用者體驗相當不好吧
問題分析:雖然你的activity銷燬了,你的handler卻還存在,雖然你已退出啟動頁,延遲載入的程式碼依然會執行
優化後代碼,當用戶點選back鍵,移除handler回撥:
public class StartActivity extends AppCompatActivity { private Handler handler; private MyThread thread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); ButterKnife.bind(this); handler = new Handler(); thread = new MyThread(); handler.postDelayed(thread, 3000); } private class MyThread implements Runnable { @Override public void run() { startActivity(new Intent(StartActivity.this, MainActivity.class)); finish(); } } @Override public void onBackPressed() { super.onBackPressed(); handler.removeCallbacks(thread);//移除回撥 } }
當然,這不是唯一的處理方案,類似,愛奇藝,網易新聞這種就稍微流氓一些,當用戶誤點以後,是不允許使用者返回的,是直接禁用了back鍵,只能通過殺死程序的方式退出了。
延遲啟動之按Home鍵後自動啟動:
方法與上邊的相同只要這樣:
@Override
protected voidonStop() {
super.onStop();
mhandler.removeCallbacks(myRunnable);
}