我有一个类,它在后台执行一些命令。类方法是异步执行的(通过使用AsyncTask),当命令完成时,它会使用命令结果发布事件。然后,开始新活动。为此,我在OnCreate方法中添加了MainActitity:
ssh = new SshSupport();
ssh.Connect();
ssh.ExecuteCommand(commandType);
//..................................
ssh.eventHandler = new ISshEvents()
{
@Override
public void SshCommandExecuted(SshCommandsEnum commandType, String result)
{
if (progressDialogExecuting.isShowing()) progressDialogExecuting.dismiss();
Intent intent = new Intent(MainActivity.this, ResultListActivity.class);
intent.putExtra("result", result);
intent.putExtra("commandType", commandType);
startActivity(intent);
}
所以它的工作原理应该如此。我的命令在后台启动,完成后,我的事件将触发并显示带有结果的新活动(所有结果都通过getIntent()。getExtras()接收,然后格式化为应该显示。
问题:关于结果活动我有"刷新"按钮。按下时,应刷新所有数据。所以我需要再次执行ssh.ExecuteCommand(commandType);
来获取刷新的数据。请注意,我不想为此打开新的ssh连接。相反,我想使用已经打开的连接,然后再次执行我的命令。
所以我做了我的' ssh'静态,我按下刷新按钮时使用MainActivity.ssh.ExecuteCommand(commandType);
。它可以工作,但很明显,它会导致创建ResultListActivity的第二个实例,而不是刷新现有的数据。
我甚至可以通过检查它是否已经存在来重新创建结果活动(例如通过向其添加' active'布尔静态变量)。但是,它不会帮助我,因为我仍然无法刷新现有活动中的数据。
那么,我该怎么办呢?我现在被困了......你有什么想法吗?
答案 0 :(得分:0)
没有回复,所以我回答了我自己的问题。我的解决方案是: - 将我的活动launchMode更改为singleTop - 覆盖方法onNewIntent
在这种情况下,每次我开始此活动时:如果活动已存在,则不会再次创建。相反,将调用onNewIntent方法。
http://developer.android.com/guide/topics/manifest/activity-element.html#lmode http://developer.android.com/reference/android/app/Activity.html#onNewIntent%28android.content.Intent%29
然而,我不确定这样的方法是否合适。你觉得怎么样?