Android返回app调用方法

时间:2014-05-21 21:31:10

标签: android return adt multitasking

我刚刚开始学习如何构建Android应用程序,并遇到了一个问题: 我想,当用户离开应用程序(转到主屏幕,多任务),然后他们返回,应用程序调用某种方法。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

这个问题比它看起来更棘手。当你离开它后返回应用程序时,然后调用方法onResume活动在应用程序被中断时处于活动状态。但是当你从一个活动转到另一个活动时会发生同样的事情(在第二个活动的onResume被调用)。如果你只是从onResume调用方法,那么每次调用任何活动的onResume时都会调用它。

看看这个解决方案......

首先,您拥有BaseActivity,该活动由需要调用该方法的所有活动扩展:

abstract public class BaseActivity extends Activity implements IName {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
    }

    @Override
    protected void onResume() {
        if (AppClass.getPausedActivity() != null) {
            if (this.getClassName().equals(AppClass.getPausedActivity()))
                //call specific method
        }

        AppClass.setPausedActivity(""); 
        super.onResume();
    }

    @Override
    protected void onPause() {
         AppClass.setPausedActivity(this.getClassName());
         super.onPause();
    }

    @Override
    abstract public String getClassName();
}

如您所见,它实现了接口IName:

public interface IName
{
    String getClassName();
}

onPause中的BaseActivity(当它被中断时)调用AppClass的setPausedActivity方法,该方法记住被中断的最后一个活动名称。在onResume中(当应用和活动继续时),我们比较当前活动的名称和上次暂停的活动。

因此,当应用程序被中断时,这些名称将是相同的,因为您暂停了一个活动并返回到同一个活动。当您从其他活动中调用活动时,这些名称将不相同,并且不会调用方法。

以下是AppClass的代码:

public class AppClass extends Application {

    public static String pausedActivity;

    public static String getPausedActivity() {
        return pausedActivity;
    }

    public static void setPausedActivity(String _pausedActivity) {
        pausedActivity = _pausedActivity;
    }
}

此外,这里是扩展BaseActivity的活动示例:

public class MainActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...
    }

    //here you set name of current activity
    @Override
    public String getClassName() {
        return "MainActivity";
    }
}

答案 1 :(得分:0)

您已加入Activity lifecycle。您需要实现相应的逻辑,以确定用户之前是否已经在您的应用中(即使用SharedPreferences)。