我使用此权限在Stratup上制作了我的应用
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
并将其添加到我的AndroidManifast.xml
<receiver android:enabled="true" android:name=".BootUpReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
这在我的java代码中:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class BootUpReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, Main.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
当应用程序在启动时启动时,它会崩溃,当我再次进行测试时,它会正常工作。我不知道它的原因是什么。所以我决定以一些延迟来解决这个问题。我希望你的帮助增加延迟。
答案 0 :(得分:4)
我有一个类似的要求,在系统启动后延迟启动服务。我将延迟添加到接收器,如下所示。其余的代码看起来很好。
public void onReceive(final Context context, Intent intent) {
// We can't wait on the main thread as it would be blocked if we wait for too long
new Thread(new Runnable() {
@Override
public void run() {
try {
// Lets wait for 10 seconds
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
Log.e(TAG, e.getMessage());
}
// Start your application here
}
}).start();
}
在这里,我启动了一个新的Thread
,延迟时间为10秒,可以在延迟后启动应用程序或服务。
答案 1 :(得分:0)
我会从广播接收器启动IntentService,并在执行繁重处理之前通过在onHandleIntent()内部休眠来实现延迟。
另一个答案建议从广播接收器创建一个线程并在那里睡觉。 我对这种方法的关注是接收器对象将在没有任何应用程序组件(活动,服务,接收器)的情况下离开应用程序,这意味着操作系统可能比在有实时服务的情况下更可能杀死进程。 话虽如此,我猜测Android无论如何都不会杀死这个过程,因为系统刚刚启动,通常应该有足够的可用资源,但是,服务方法似乎更符合Android的精神。