2

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

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

我尝试过两种解决方案(如下所示)。两者都会启动应用程序,但会提示“应用程序无响应”(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);

    }

}
4

3 回答 3

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

}
于 2013-06-18T06:25:19.670 回答
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);
于 2013-06-18T05:37:09.510 回答
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();


}
}

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

于 2013-06-18T05:37:16.403 回答