我想在一段时间后启动我的应用程序。
我成功启动了我的应用程序。但我希望应用程序在开始之前等待一分钟。
我尝试了两种解决方案(如下所示)。两者都启动应用程序,但会提示“应用程序无响应”(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);
}
}
答案 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();
}
}