再次返回Intent,应用执行缓慢

时间:2018-07-17 16:19:52

标签: android bitmap fragment lifecycle

在我的应用中,我有两个意图。首先,我将图像作为图库和相机的输入。然后,我将uri发送到下一个活动。我将uri转换为位图并在位图上应用了一些效果。该活动包含两个片段。我在asynctask中进行过滤。应用程序首次运行良好。但是当我回到我的第一个活动并转到下一个活动时,它的执行速度就会变慢。

在MainActivity中,我使用了这段代码

Intent intent = new Intent(getApplicationContext(),EditorPage.class);
intent.putExtra("imageUri", cropUri.toString());
startActivity(intent);
finish();

在EditorActivity中,我将此代码用于后退按钮

startActivity(new Intent(getApplicationContext(),MainActivity.class));
finish();

在进入EditorActivity之前,我正在使用第三方库来裁剪图像。请帮我。谢谢

3 个答案:

答案 0 :(得分:0)

裁剪图像是一个好的开始。
但是我认为加载的位图可能仍然会降低您的应用性能。

我建议您使用Glide加载位图。
滑行为An image loading and caching library for Android focused on smooth scrolling https://github.com/bumptech/glide

答案 1 :(得分:0)

请尝试不要按照以下步骤关闭您的MainActivity

Intent intent = new Intent(getApplicationContext(),EditorPage.class);
intent.putExtra("imageUri", cropUri.toString());
startActivity(intent);
//finish(); <--- remove this line

只需致电onBackPressed(),然后按以下方式致电startActivity()

//remove this bellow line
//startActivity(new Intent(getApplicationContext(),MainActivity.class));
finish();

答案 2 :(得分:0)

如果您的活动层次结构为First-> Second,则从头开始打开Second不应调用finish()onBackPressed()

导航First-> Second

Intent intent = new Intent(getApplicationContext(),EditorPage.class);
intent.putExtra("imageUri", cropUri.toString());
startActivity(intent);

然后从Second返回到First,调用finish(),前提是SecondFirst而不是其他方式启动。确保在调用Second

之前释放finish()中的所有资源

如果Second并非总是由First开始,则您需要采取一些额外的步骤:

  1. 在清单中添加First作为Second的父项

    <activity
        android:name="...Second"
        android:allowTaskReparenting="true"
        android:parentActivityName="...First"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="...First" />
    </activity>
    
  2. 调用类似这样的函数:

    public final void navigateUp() {
        Intent upIntent = NavUtils.getParentActivityIntent(this);
        if (upIntent == null) {
            onBackPressed();
        } if (NavUtils.shouldUpRecreateTask(this, upIntent) || isTaskRoot()) {
            TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent).startActivities();
        } else {
            upIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            NavUtils.navigateUpTo(this, upIntent);
        }
    }