Android中的“状态”是什么意思

问题描述:

在android中,我们一直在讲保留活动状态/片段状态,但是我有这个问题,确实是“状态”的意思。例如,假设我具有以下对话框片段Android中的“状态”是什么意思

public class Dialog extends DialogFragment { 
    private String mMessage; 

    @Override 
    public void onCreateView(LayoutInflater inflater, 
          ViewGroup container, 
          Bundle savedInstanceState) { 
    View v = super.onCreateView(inflater, container, savedInstanceState); 
    ((TextView) v.findViewById("message")).setText(mMessage); 
    } 
} 

但是在设备旋转过程中不会将“mMessage”保留为成员变量吗?因此,在这种情况下,“mMessage”是否被认为是创建此片段时必须保留并进行参数化的状态?

在设备上旋转,当前可见的活性被破坏。一些小部件如DialogFragment保存并恢复其自己的状态。

Handling Configuration

Activity Lifecycle

+0

从官方文档提供的示例看来,片段状态可以通过使用以下行'setRetainInstance(true)'保留片段本身的实例来保留。是否仍然有必要将参数放入参数中? –

+0

正确。从配置文档“当Android系统由于配置更改而关闭您的活动时,您标记为保留的活动片段不会被销毁。您可以将这些片段添加到活动中以保留有状态的对象。 Fragment类并声明对有状态对象的引用 2.创建片段时调用setRetainInstance(boolean) 3.将片段添加到活动中 4.使用FragmentManager在活动重新启动时检索片段。 “ – Stuckzilla

State的概念来自OOP,而不是来自android,以简化:对象具有状态(数据)和行为(代码)。

片段和活动的工作方式有点不同,如果片段被停止,片段将保留状态,但它们将失去管理它们的活动(除非您保留它)。然而,活动在配置改变时会失去状态。

的文档解释了生命周期,以及如何/时保留片段: https://developer.android.com/guide/components/fragments.html#Lifecycle

+0

你是对有关活动的成员变量,但片段我不认为你是正确的。见https://inthecheesefactory.com/blog/fragment-state-saving-best-practices/en –

+0

你是对的,我太笼统了,我更新了答案。 –