如何让应用程序在启动时自动运行并延迟?

时间:2014-09-04 07:09:39

标签: java android broadcastreceiver startup

我使用此权限在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);
    }

}

当应用程序在启动时启动时,它会崩溃,当我再次进行测试时,它会正常工作。我不知道它的原因是什么。所以我决定以一些延迟来解决这个问题。我希望你的帮助增加延迟。

2 个答案:

答案 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秒,可以在延迟后启动应用程序或服务。

参考链接: https://github.com/midhunhk/message-counter/blob/master/v2/MessageCounter/src/com/ae/apps/messagecounter/receivers/BootCompletedReceiver.java

答案 1 :(得分:0)

我会从广播接收器启动IntentService,并在执行繁重处理之前通过在onHandleIntent()内部休眠来实现延迟。

另一个答案建议从广播接收器创建一个线程并在那里睡觉。 我对这种方法的关注是接收器对象将在没有任何应用程序组件(活动,服务,接收器)的情况下离开应用程序,这意味着操作系统可能比在有实时服务的情况下更可能杀死进程。 话虽如此,我猜测Android无论如何都不会杀死这个过程,因为系统刚刚启动,通常应该有足够的可用资源,但是,服务方法似乎更符合Android的精神。