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