Java Android-保存/恢复自定义类的状态
我有一些ssh支持类——它在内部使用jsch。我在主要活动中使用本课程,方法如下:Java Android-保存/恢复自定义类的状态,java,android,ssh,bundle,state,Java,Android,Ssh,Bundle,State,我有一些ssh支持类——它在内部使用jsch。我在主要活动中使用本课程,方法如下: public class MainActivity extends Activity { SshSupport ssh = new SshSupport(); ..... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
public class MainActivity extends Activity
{
SshSupport ssh = new SshSupport();
.....
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//Handle events for ssh
ssh.eventHandler = new ISshEvents()
{
@Override
public void SshCommandExecuted(SshCommandsEnum commandType, String result)
{
}
//other overrides here
}
//Ssh operations on gui item click
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3)
{
if (ssh.IsConnected() == false)
{
try
{
ssh.ConnectAsync(/*parameters*/);
}
catch (Exception e)
{
e.printStackTrace();
}
}
try
{
ssh.ExecuteCommandAsync(SshCommandsEnum.values()[position]);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
public class MainActivity extends Activity
{
SshSupport ssh;
private RetainedFragment dataFragment;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// find the retained fragment on activity restarts
FragmentManager fm = getFragmentManager();
dataFragment = (RetainedFragment) fm.findFragmentByTag("data");
// create the fragment and data the first time
if (dataFragment == null)
{
ssh = new SshSupport();
// add the fragment
dataFragment = new RetainedFragment();
fm.beginTransaction().add(dataFragment, "data").commit();
// load the data from the web
dataFragment.setData(ssh);
}
ssh = dataFragment.getData();
ssh.eventHandler = new ISshEvents()
{
.......
}
}
@Override
public void onDestroy()
{
super.onDestroy();
// store the data in the fragment
dataFragment.setData(ssh);
}
}
这是正确的吗?它似乎起到了应有的作用
那么,解决这个问题的最佳方法是什么
使用保留的片段来管理SSH连接。所谓“保留片段”,我指的是您调用了setRetainInstance(true)
的片段。该片段不会在配置更改时被销毁和重新创建。相反,它将被“保留”并直接交给新的活动实例,因此它保留的任何内容都将被类似地保留
如果此片段没有UI,通过FragmentTransaction
添加,则最安全。尽管操作小心,但您可以将此行为添加到现有的动态片段中
您可以在。中阅读更多关于这方面的信息,所以如果我正确理解文档示例的话。我应该将创建的ssh对象推送到上面示例中的setData吗?好的,但是如何处理我的事件呢?在我将对象放入片段之前,我应该只分配一次事件吗?我指的是事件overrides@user1209216:“我应该在上面的示例中将创建的ssh对象推送到setData吗?”--您应该在片段的数据成员中保留“创建的ssh对象”。是否使用getter和setter取决于您。“在我将对象放入片段之前,我应该只分配一次事件吗?”--大概是这样。@user1209216:从在整个配置更改中保持连接的角度来看,这应该是可行的。就我个人而言,我只是将所有SSH相关的逻辑移到片段中,以实现更好的代码封装。