[英]Android return to app call method
我最近才开始学习如何构建android应用程序,遇到一个问题:我希望当用户离开应用程序(转到主屏幕,执行多任务)并返回时,该应用程序调用某种方法。 我怎样才能做到这一点?
这个问题比看起来更棘手。 当您离开应用程序后返回应用程序时,则称为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";
}
}
您必须遵守Activity
生命周期 。 您将需要实现相应的逻辑来确定用户之前是否曾经在您的应用程序中使用过(即使用SharedPreferences
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.