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);                

         }

}

I m starting an activity on android startup but android takes some time to establish network connection therefore I want to delay 10 sec the app launch so that my app can use internet.

4

3 回答 3

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); 

        }
    };
  }

}
于 2013-10-14T17:19:37.393 回答
0

您应该使用另一个可以检测网络状态变化的广播接收器,而不是制造一些随机延迟(这是不可靠的)。例如:网络状态接收器。这将检测网络状态何时更改。请参阅此处:检查 INTENT 互联网连接

所以你的应用程序应该有 2 个 BroadcastReceiver:BootupReceiver 和 NetworkStateReceiver。

在 BootUpReceiver 的 onReceive() 中,将首选项中的一些标志设置为 true。然后在 NetworkStateReceiver 的 onReceive() 中,检查标志,如果标志为真,则打开你的 Activity 并将标志设置为假。

(要在 BroadcastReceiver 中的 SharedPreferences 中设置值,请参阅: Broadcastreceiver 中的共享首选项

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

于 2013-10-14T17:32:44.057 回答
0

做这种后台处理的最佳实践是创建一个启动屏幕,并在特定时间的繁重活动开始时使用各种动画和=有吸引力的东西加载它。这样用户就可以等到后台进程完成。

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

希望这会有所帮助。

于 2013-10-14T17:23:14.570 回答