当我从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
曾经?)
答案 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();