如何延迟在Android启动时启动应用程序?

时间:2013-10-14 17:15:50

标签: android android-intent broadcastreceiver

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秒的应用程序启动,以便我的应用程序可以使用互联网。

3 个答案:

答案 0 :(得分: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); 

        }
    };
  }

}

答案 1 :(得分:0)

进行这种后台处理工作的最佳做​​法是创建一个启动画面,并在特定时间内在重度活动开始时使用各种动画加载它们。这样用户可以等到后台进程完成。

您的方法似乎需要大量编码。

希望这会有所帮助。

答案 2 :(得分: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

虽然这样可行,但这不是自动启动Activity的好习惯。用户可能不喜欢它。