Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:具体如何处理背压?_Android - Fatal编程技术网

Android 安卓:具体如何处理背压?

Android 安卓:具体如何处理背压?,android,Android,让我详细解释一下 首先,;我知道,如果用户按back并返回上一个活动,则上一个活动会正确地触发恢复方法。这没关系 我的应用程序中有一个根活动,它通过按钮引导4个不同的活动。我想知道,用户在哪个活动中按下了后退按钮?是否可以使用类似于处理程序或类似的方法 事实上,我已经找到了解决办法。我有4个不同的静态布尔变量,每个变量代表一个活动。让我在代码中显示: public class MainActivity extends Activity { // This is root static

让我详细解释一下

首先,;我知道,如果用户按back并返回上一个活动,则上一个活动会正确地触发恢复方法。这没关系

我的应用程序中有一个根活动,它通过按钮引导4个不同的活动。我想知道,用户在哪个活动中按下了后退按钮?是否可以使用类似于
处理程序
或类似的方法

事实上,我已经找到了解决办法。我有4个不同的静态布尔变量,每个变量代表一个活动。让我在代码中显示:

public class MainActivity extends Activity { // This is root

    static Boolean activityA;
    static Boolean activityB;
    static Boolean activityC;
    static Boolean activityD;

    public void onClick(View v) {
        if(v == ActivitvyA) //of course psuedo 
             activityA = true
        //...there are similar controls
    }

    protected void onResume() {
        if(activitiyA) // If true, this means the user pressed back on ActivityA
    }

}
你觉得怎么样?有什么不同且有效的方法吗


任何帮助都会很好。

当您打开活动时,请使用
startActivityForResult(意图、请求代码)
,然后。。通过设置活动名称,您可以覆盖活动中的
onBackPressed()

@Override
public void onBackPressed() {
    super.onBackPressed();
    setResult(ActivityName);
}

然后在您的
main活动中
检查通过的结果。

基本上,您想知道当用户登录到您的根活动时,他来自哪个活动

我能看到的携带此类信息的最佳方式是使用
startActivityForResult
开始您的孩子的活动

public static final int CODE_A = 10;
public static final int CODE_B = 20;

public void goToA() {
  Intent i = new Intent(this,AActivity.class);
  startActivityForResult(i, CODE_A);
}

public void goToB() {
  Intent i = new Intent(this,BActivity.class);
  startActivityForResult(i, CODE_B);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if(resultCode==CODE_A) {
    // ...
  }
  else if(resultCode==CODE_B) {
    // ...
  }
}
另一种方法是将用户可见的最后一个活动存储在某个地方(例如在自定义应用程序类中),并在每个活动的onPause方法中更新该活动。比如:

class MyApplication extends android.app.Application {
  public Class latestActivity;
}

class MyBaseActivity extends Activity {
  public void onPause() {
    ((MyApplication)getApplication()).latestActivity = this.getClass();
    super.onPause();
  }
}
最后一种方法是将刚刚启动的活动存储在根活动中

class MyRootActivity extends Activity {
  private String latestUserAction;

  public void goToA() {
    latestUserAction = "goToA";
    startActivity(Intent.ACTION_VIEW, .........
  }

  // Don't forget to check that latestUserAction gets saved and restored when your activity is paused or stopped.
}

好的,我可以这样做,但仍然不确定如何定义用户按下后退按钮的活动。你能解释一下吗?我认为这不适合这种情况。因为按下后退按钮很特别。我是说不平常。顺便说一句,我不会为了任何结果而开始活动。我希望,我能解释一下。编辑:刚刚意识到你的意思,谢谢。如果你按照你提到的那样编辑你的答案,我会接受。在你的主要活动中使用
StartActivityForResult()
,在你的主要活动中使用
setResult()
作为其他活动的活动名称,现在只需检查结果。作为活动名称..是的,这正是我想要的,很好的回答,谢谢。但是我想再问一个问题,如果start
Intent.ACTION\u VIEW
带有URI怎么办?那么latestActivity显示了什么?如果打开默认浏览器,那么latestActivity当然不会更新。所以你不能用可能性2。