1. 程式人生 > >關於android啟動頁優化建議

關於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);
}