活动重用逻辑

时间:2016-09-02 11:58:28

标签: java android performance android-intent service

我有一个活动B,它是从一个活动A生成的。在活动B中,我有一个按钮,它将把我发送到活动C.在活动C里面,我将运行一个服务,我希望在该服务内回到活动B。

因此它将是A-> B-> C->服务 - > B

那个B活动就像是apk转移的聊天/历史,现在我还没有使用数据库(以后我会更改代码,我现在不能)。

将在活动B中显示的数据来自该服务(我将发送apk文件),并且在发送文件之后我想要向活动B检索我发送的应用程序的名称,以便我可以在聊天/历史记录中显示。

如果在服务中我创建了一个将运行活动B的新意图,它将始终再次启动活动B,而不是"保持"已存在的旧信息。

你们怎么认为我应该这样做?

我知道有一个标志会调用已经在堆栈中的活动B(当发生这种情况时,它会转到onResume()方法(对吗?)),但是还有其他选择吗?

这样做的最佳方式是什么?

谢谢你们!对不起,如果它太混乱了。

3 个答案:

答案 0 :(得分:2)

要保留ActivityB,请在清单中放置以下内容:

<activity android:name="ActivityB"
   android:launchMode="singleTask" />

这会保持活动。 onCreate只会被调用一次。所有进一步的请求都应在onNewIntent()处理。

来自LocalActivityManager.java startActivity doc:

  

如果当前活动使用非多重启动模式(例如   singleTop),或者Intent有FLAG_ACTIVITY_SINGLE_TOP标志   设置,然后当前活动将继续运行及其   名为Activity.onNewIntent()的方法。

答案 1 :(得分:1)

从FirstActivity使用startActivityForResult()方法调用SecondActivity

例如:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

在SecondActivity中设置要返回FirstActivity的数据。如果您不想退回,请不要设置任何内容。

例如:在secondActivity中,如果要发回数据:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

如果您不想返回数据:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

现在,在您的FirstActivity类中,编写onActivityResult()方法的以下代码。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}//onActivityResult

答案 2 :(得分:1)

使用

启动活动C.
Intent nextIntent = new Intent(this, ActivityC.class);
startActivityForResult(nextIntent, requestCode);

在服务上,您可以使用结果代码完成活动,以确定它是成功还是失败。 在活动B中,通过onActivityResult接收结果。如果成功请从数据库中提取数据(使用singleton Datahelper类来设置/获取数据,因为您现在没有实现数据库。使用非常容易集成和处理的Realm)。

我想这会解决你的问题。