Android等待1分钟后启动应用程序

时间:2013-06-18 05:29:38

标签: android handler thread-sleep

我想在一段时间后启动我的应用程序。

我成功启动了我的应用程序。但我希望应用程序在开始之前等待一分钟。

我尝试了两种解决方案(如下所示)。两者都启动应用程序,但会提示“应用程序无响应”(ANR)对话框。

如果我将两个解决方案中的时间修改为40000毫秒,则不会提示ANR。

有人知道为什么吗?如何在没有任何ANR提示的情况下将时间缩短到1分钟?

非常感谢你!

public class StartAtBoot extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    /* SOLUTION 1:
     * final Context con = context; Handler handler = new Handler();
     * handler.postDelayed(new Runnable() { public void run() { Intent i =
     * new Intent(con, MainActivity.class);
     * i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); con.startActivity(i); } },
     * 60000);
     */


            // SOLUTION 2:
    android.os.SystemClock.sleep(60000);

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

    }

}

3 个答案:

答案 0 :(得分:0)

您可以使用处理程序

int duration = 1000; // milliseconds

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent i = new Intent(context, MainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(i);
    }
}, duration);

答案 1 :(得分:0)

您可以尝试类似

的内容
public class StartAtBoot extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    /* SOLUTION 1:
     * final Context con = context; Handler handler = new Handler();
     * handler.postDelayed(new Runnable() { public void run() { Intent i =
     * new Intent(con, MainActivity.class);
     * i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); con.startActivity(i); } },
     * 60000);
     */


            // SOLUTION 2:
    Runnable runnable = new Runnable(){
        @override
        public void run(){
            Thread.sleep(60000);
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }

    (new Thread(runnable)).start();


}
}

我正在启动一个后台线程来启动意图。

答案 2 :(得分:0)

public class StartAtBoot extends BroadcastReceiver {

    public class MyCountDownTimer extends CountDownTimer
    {
        Context mContext;
        public MyCountDownTimer(Context context, long millisInFuture, long countDownInterval)
        {
            super(millisInFuture, countDownInterval);

            mContext = context;
        }

        @Override
        public void onFinish()
        {
            Intent i = new Intent(mContext, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
            mContext.startActivity(i); 
        }

        @Override
        public void onTick(long millisUntilFinished)
        {

        }       
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        new MyCountDownTimer(context, 60000, 60000).start(); 
    }

}