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();