0

我有一个应用程序会在启动后延迟几秒钟自动启动。顺便说一句:这不是邪恶的!用户必须自己启用!当我现在点击应用程序的图标时,我希望打开已在启动时启动的相同实例。我不希望应用程序重新启动。但这就是现在发生的事情。

背景:我正在向 TextView 写入一些调试信息。当应用程序在启动时启动时,它会立即进入后台moveTaskToBack(true),因为它当然不应该覆盖屏幕。用户应该看到 IDLE 屏幕。因此,只有在手动打开应用程序时,应用程序(以及此输出)才能变得可见。

这是 AndroidManifest.xml:

<application android:icon="@drawable/fritzbox"
             android:label="@string/app_name"
             android:allowTaskReparenting="true"
             android:persistent="true">

    <uses-library android:name = "com.google.android.maps"              />

    <receiver android:name=".BootUpReceiver">
        <intent-filter>
            <action   android:name = "android.intent.action.BOOT_COMPLETED" />
            <category android:name = "android.intent.category.DEFAULT"      />
        </intent-filter>
    </receiver>

    <activity android:name =".WiFiOnDemandActivity"
              android:label="@string/app_name"
              android:allowTaskReparenting="true"
              android:launchMode="singleInstance">
        <intent-filter>
            <action   android:name = "android.intent.action.MAIN"       />
            <category android:name = "android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

<uses-permission android:name="android.permission.INTERNET"               />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"   />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE"                />
<uses-permission android:name="android.permission.READ_CONTACTS"          />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"   />
<uses-permission android:name="android.permission.WAKE_LOCK"              />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

如您所见,我已经尝试过android:launchMode,android:allowTaskReparentingandroid:persistent. 接收 BOOT_COMPLETED 广播的广播接收器会创建一个 PendingIntent,它与 AlarmManager 一起调度。所以应用程序在启动START_DELAY后 15 秒 ( ) 启动。这是代码:

public class BootUpReceiver extends BroadcastReceiver implements Defines
{       
    private AlarmManager  mAlarmManager  = null;
    private Intent        mIntent        = null;
    private PendingIntent mPendingIntent = null;


    @Override
    public void onReceive( final Context context, final Intent intent)
    {
        mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE   );

        mIntent       = new Intent ( context, WiFiOnDemandActivity.class );         
        mIntent.setAction(intent.getAction());
        mIntent.addFlags ( Intent.FLAG_ACTIVITY_NEW_TASK );

        mPendingIntent       = PendingIntent.getActivity( context, 0, mIntent, 0);

        mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + START_DELAY, mPendingIntent );
    }
}

奇怪的是,有时它似乎按预期工作(没有重新启动),但有时却没有!

谢谢!

伯恩德

4

1 回答 1

0

一定要显示你的代码,但这不能保证。如果内存不足,系统可能会随时终止您的进程,因此当您通过启动器启动时,您可能会获得一个新进程。是什么让您认为您需要完全相同的实例?

于 2012-05-08T07:21:40.110 回答