当1个活动内存不足时切换活动

时间:2018-04-09 14:50:11

标签: java android

所以我有一个包含多个活动的应用程序。因此,当我从1个活动切换到另一个活动然后单击后退按钮时,它可以正常工作。但是,当我点击1个活动然后退出应用程序并返回时,它会从内存中删除主要活动,因此当您单击后退按钮时,没有任何反应。这里有两种可能的解决方案,如果以某种方式检测活动是否内存不足或者我是否可以将活动保存在内存中。这是我打开活动的方式:

Intent intent = new Intent(context, QuoteActivity.class);
Gson gson = new Gson();
String quoteDataAsAString = gson.toJson(quoteData);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("QuoteData", quoteDataAsAString);
context.startActivity(intent);

这是以下两项活动:

<activity
    android:name=".MainActivity"
    android:launchMode="singleInstance"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name=".quote.activity.QuoteActivity"
    android:launchMode="singleInstance"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
<activity
        android:name=".user.UserFeedBackActivity"
        android:launchMode="singleInstance"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

这是我在主视图中的内容:

@Override
public void onStart() {
    super.onStart();
    if (QuoteActivity.isChangedWithFavourites()) {
        gridView.setAdapter(new QuoteImageAdapater(getApplicationContext(), reader.getCorrectData(currentSection), section));
        QuoteActivity.setChangedWithFavourites(false);
    }
}

显示它的gif:https://i.imgur.com/YZIkBU1.gifv

这应该是这样的:https://i.imgur.com/hghjB9L.gifv

即使我没有调用finish方法,这两个活动也会出现此问题。

编辑:我想通了我必须将launchMode更改为singleTop

1 个答案:

答案 0 :(得分:0)

Application课程中,您可以覆盖onLowMemory()方法。

文档说,

  

当整个系统内存不足时调用此方法,并且主动运行的进程应调整其内存使用量。虽然没有定义调用它的确切位置,但通常会在所有后台进程被杀死时发生。也就是说,在达到主机服务和前台UI的杀戮过程之前,我们希望避免被杀。

调用OnLowMemory后,使用EventBus可以触发应由Activity捕获的事件。您可以在其上执行所需的操作。

如果您要查找,如果Activity遇到OutOfMemoryException(OOM),请按照此答案。

How do I discover memory usage of my application in Android?