长时间运行的过程在Activity中启动,需要在Activity中得到结果

时间:2014-10-09 23:35:16

标签: android android-activity android-fragments android-service

当我从ActivityA切换到ActivityB时,我需要对来自Bitmap的{​​{1}}进行一些后台处理(可能只需几秒钟)显示在ActivityA中。而不是推迟ActivityB的发布并使我的应用程序感到迟钝,我想立即启动它并在处理完成后让它使用ActivityB(用户可以做有用的事情)在Bitmap准备好之前ActivityB中的内容。

从长时间运行的进程接收数据的标准答案似乎是一个保留的非UI Bitmap,如果你的Fragment被销毁然后重新创建,那么效果很好,但是在哪里呢?你切换到另一个Activity?即使保留,非UI Activity实例似乎也与特定的Fragment类相关联,即使在Activity本身被销毁后也是如此,并且似乎从一个Activity调用FragmentManager.findFragmentByTag(String tag) ActivityB的实例无法检索在Fragment中创建的已保留的非用户界面ActivityA

FragmentManager.findFragmentByTag(String tag)是否应该来自不同Activity的实例,而我只是做错了什么?或者在这种情况下是否建议采用其他技术?

Service在这里感觉有点过分,但也许我错了,在{i} {{}}}实例的频繁创建/销毁在Android应用中是完全可以接受的(在这种情况下我的问题是:为什么要打扰一个保留,非UI Service曾经?)

1 个答案:

答案 0 :(得分:1)

如何创建自己的Application对象?

您可以拥有一个私有成员变量来保存您的位图以及两个活动都可以访问的getter和setter。

类似的东西:

public class MyApplication extends Application 
{
    private Bitmap bitmap;

    public void setBitmap(Bitmap bitmap)
    {
        this.bitmap = bitmap;
    }

    public Bitmap getBitmap()
    {
        return bitmap;
    }
}

然后在您的Android清单文件中引用您的应用程序。

    <application
        android:name=".MyApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

然后在您的活动中,只需调用getApplication(),将其强制转换为Application类并调用getter或setter。

    MyApplication app = (MyApplication)getApplication();
    app.setBitmap(bitmap);
    Bitmap bitmap = app.getBitmap();