Android 长时间运行的进程在ActivityA中启动,需要ActivityB中的结果

Android 长时间运行的进程在ActivityA中启动,需要ActivityB中的结果,android,android-activity,android-fragments,android-service,Android,Android Activity,Android Fragments,Android Service,当我从ActivityA切换到ActivityB时,我需要在ActivityB中的位图上进行一些后台处理(可能需要几秒钟的时间),然后它才会显示在ActivityB中。与其延迟启动ActivityB并让我的应用程序感觉迟钝,我想立即启动它,并让它在处理完成后立即使用位图(在位图准备就绪之前,用户可以在ActivityB中执行有用的操作) 从长时间运行的流程接收数据的标准答案似乎是保留的非UI片段,如果您的活动被销毁然后重新创建,这将非常有效,但是您在哪里切换到不同的活动?即使在活动本身被销毁之后

当我从
ActivityA
切换到
ActivityB
时,我需要在
ActivityB
中的
位图
上进行一些后台处理(可能需要几秒钟的时间),然后它才会显示在
ActivityB
中。与其延迟启动
ActivityB
并让我的应用程序感觉迟钝,我想立即启动它,并让它在处理完成后立即使用
位图
(在
位图
准备就绪之前,用户可以在
ActivityB
中执行有用的操作)

从长时间运行的流程接收数据的标准答案似乎是保留的非UI
片段
,如果您的
活动
被销毁然后重新创建,这将非常有效,但是您在哪里切换到不同的
活动
?即使在
活动
本身被销毁之后,即使是保留的、非UI的
片段
实例也似乎与特定的
活动
类相关联,而且从
活动b
的实例调用
片段管理器.findFragmentByTag(String tag)
将无法检索保留的,在
活动a
中创建的非UI
片段

FragmentManager.findFragmentByTag(字符串标记)
是否应该从不同的
活动的实例中工作,而我只是做错了什么?或者,在这种情况下,是否有其他建议的技术


一个
服务
在这里感觉有些过分,但也许我错了,频繁创建/销毁
服务
实例在Android应用程序中是完全可以接受的(在这种情况下,我的问题是:为什么要为保留的非UI
片段
而烦恼?

创建自己的应用程序对象如何

您可以有一个私有成员变量来保存位图以及两个活动都可以访问的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" >

我很难在上找到应用程序类的推荐用法,但是它的API文档()说“通常不需要对应用程序进行子类化。在大多数情况下,静态单例可以以更模块化的方式提供相同的功能”-因此,也许答案是使用单例(然后使用).单身汉当然也行。不管怎样,我们都应该洗澡。:)我做了一些搜索,发现了一个关于单例和
应用程序的有趣讨论,讨论了很多优点和缺点。这个评论让我对API推荐的单例方法感觉好了一点:这里还提到了Dianne Hackborn,所以我找到了她,在这里找到了她更喜欢的单例方法:哇。谷歌小组讨论是一次很好的讨论,包括DH和马克·墨菲等重量级人物的评论。一本好书!
    MyApplication app = (MyApplication)getApplication();
    app.setBitmap(bitmap);
    Bitmap bitmap = app.getBitmap();