我有两个活动,一个是MainActivity和一个辅助活动(例如:一个关于屏幕),然后我有一个asynctask来更新MainActivity上的UI。这部分工作正常,asynctask通过调用MainActivity中的方法来更新UI,该方法使UI膨胀并设置一些值。此方法还使所有UI组件可见。
什么不起作用,在进入“关于”屏幕并返回到MainActivity之后,UI完全空白。我不明白为什么在从不同的活动导航后停止工作,否则工作正常。
有人可以提出建议吗?
这是我绘制UI的方式。这是我从线程更新它的方式,它可以工作,直到我进入about屏幕:
private void DisplayMainContent()
{
Context context = Util.DataStruct.LoadContext();
Log.d("debug", "DisplayMainContent() loaded a context " + context.toString());
RelativeLayout parent = (RelativeLayout)((Activity)context).findViewById(R.id.action_settings);
LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.activity_main, parent);
TextView version = (TextView) v.findViewById(R.id.latestVerField);
version.setText(Util.DataStruct.GetVal("version"));
}
答案 0 :(得分:-2)
关于消失数据的小故事..
建议:
nice example how to show dialog using fragment
Singletons保留了传统的类方法,并且不要求您在任何地方使用static关键字。它们最初可能要求更高,但会大大简化程序的体系结构。与静态类不同,我们可以使用单例作为参数或对象。此外,您可以像其他任何类一样使用带有接口的单例。
我看到问题:
这条线是你需要追踪的错误: (我认为你的代码的任何其他片段都与你的问题无关)
version.setText(Util.DataStruct.GetVal("version"));
解释原因:
Util.DataStruct:
我想指出的是什么? 为什么你应该避免STATIC!?
代码(数据)流程:
<强>上下文强>
你从哪里使用 DisplayMainContent()?你需要什么背景呢?
上下文应该是需要它的应用程序方法的“锚点”。 (这就像某些安全性东西 - “嗨,这个应用程序片段属于我,我有权修改和查看内容 - 所以要做任何结果你传递最近的上下文你得到 - 从片段活动对话框小部件等”)
< / LI>如果您可以使用 getContext(),例如。 (“来自父母”) - 不要使用任何静态的
示例:
@Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Context context = container.getContext(); }
@Override public View getView(int position, View convertView, ViewGroup parent) { Context context = parent.getContext(); }
关于通胀 - 使用:
LayoutInflater.from(context).inflate(res,ViewGroup,attachToRoot);
表示@bcorso:
请勿使用超出您需要的资源。
@TomaszBest抱歉,但你真的不知道你在说什么 about:Util.DataStruct.GetVal()正在调用静态方法 静态类Util.DataStruct,因此必须返回一个静态类 变量。静态类变量是单例(只有一个是单例) 创建),它不会收集垃圾。
在卸载类之前,强烈引用通过静态成员变量引用的对象。普通的ClassLoader从不卸载类,但应用程序使用的类在适当的条件下执行。
如果更改静态字段以引用其他对象,则静态字段指向的原始对象就像其他任何对象一样符合GC的条件!
静态变量的初始化包含在 Section 2.11 Static Initializers of suns JVM spec. 中。规范没有定义垃圾收集的实现 - 静态对象的垃圾收集规则会因您的VM而异。
总结:
如果您的类永久保留此对象,则只有在vm退出时才会释放它。只有自举加载程序加载的类和接口可能无法卸载。