Android - 使用AsyncTask结果中的新数据刷新运行活动

时间:2014-11-02 01:09:36

标签: java android-activity android-asynctask refresh

我有一个类,它在后台执行一些命令。类方法是异步执行的(通过使用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'布尔静态变量)。但是,它不会帮助我,因为我仍然无法刷新现有活动中的数据。

那么,我该怎么办呢?我现在被困了......你有什么想法吗?

1 个答案:

答案 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

然而,我不确定这样的方法是否合适。你觉得怎么样?