2013-10-14 220 views
0
public class BootUpReceiver extends BroadcastReceiver{ 
@Override 
public void onReceive(final Context context, Intent intent) { 

    //Delay 10 sec so that device could establish network 
    Intent i = new Intent(context, SplashActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i);     

     } 

} 

我開始在android啓動一個活動,但android需要一些時間來建立網絡連接,因此我想延遲10秒的應用程序啓動,以便我的應用程序可以使用互聯網。如何在Android啓動時延遲啓動應用程序?

回答

0

與做這種後臺處理的東西可運行

public class BootUpReceiver extends BroadcastReceiver{ 

@Override 
public void onReceive(final Context context, Intent intent) { 
    Handler handler = new Handler(); 
    int delay = 100; 
    handler.postDelayed(startApp, delay); 


    Runnable startApp = new Runnable() { 

     @Override 
     public void run() { 

      Intent i = new Intent(context, SplashActivity.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 

     } 
    }; 
    } 

} 
+0

我試過這段代碼,但它不能與runnable一起使用。 –

+0

爲什麼它沒有運行? –

0

最佳實踐讓它是創建一個啓動畫面,以及使用各種動畫和=有吸引力的東西在開始加載它重活動一段特定的時間。這樣用戶可以等到後臺進程完成。

你的方法似乎需要大量的編碼。

希望這會有所幫助。

0

而不是做一些隨機延遲(這是不可靠的),你應該使用另一個可以檢測網絡狀態變化的BroadcastReceiver。例如:NetworkStateReceiver。這將檢測網絡狀態何時更改。看到這裏:Check INTENT internet connection

所以你的應用程序應該有2個BroadcastReceivers:BootupReceiver和NetworkStateReceiver。

在BootUpReceiver的onReceive()中,在首選項中將某些標誌設置爲true。 然後在NetworkStateReceiver的onReceive()中檢查該標誌,如果該標誌爲true,則打開您的Activity並將該標誌設置爲false。

(要在一個BroadcastReceiver SharedPreferences設定值,請參閱:Shared preferences inside broadcastreceiver

雖然這會工作,但這不是一個好的做法,以自動啓動一個活動。用戶可能不喜歡它。