有没有办法确定应用程序是从头开始(即不已经在内存中)还是从后台启动(已打开应用程序并点击home
按钮)?< / p>
答案 0 :(得分:3)
确保您了解Activity Lifecycle。
答案 1 :(得分:2)
如果你的意思是Application而不是Activity,那么你应该创建一个派生自android.app.Application对象的类,并在manifest中声明这个类,以便能够通过重写方法监视它的生命周期。 每次应用程序从头开始创建此类型的一个对象时,因此如果您需要跨应用程序生命周期保存一些数据,则此对象或任何类型的单例都是这样做的好方法。
答案 2 :(得分:2)
如果您只是想知道APP何时从背景状态返回(当您返回主页或其他应用程序并再次返回应用程序时),这可能会对您有所帮助。 如果您发现不适用的情况,请告诉我。
public class FatherClass extends Activity {
private static int activities = 0;
public void onCreate(Bundle savedInstanceState, String clase) {
super.onCreate(savedInstanceState);
}
protected void onRestart(){
super.onRestart();
if(activities == 0){
Log.i("APP","BACK FROM BACKGROUND");
}
}
protected void onStop(){
super.onStop();
activities = activities - 1;
}
protected void onStart(){
super.onStart();
activities = activities + 1;
}
}
你的所有活动都必须从这一活动延伸出来。
并且很简单,如果您的主要活动执行onCreate()(您想要的活动中的方法,而不是我的示例中的onCreate),并且您从未在另一个活动中调用它(将其视为启动画面)然后你从头开始,但如果你的活动执行onRestart()并且计数器“活动”值为0“零”,那么你将返回一个背景状态,我希望这可以帮助你,不要迟到另一个人。
答案 3 :(得分:0)
整个代码应该用app specefic super Activity
编写 boolean isForeground = isInForeground(this);
if ((!hasFocus) && (!isForeground)) {
context.isBackground = true;
Log.v("Alalytics", "Background...");
}
else if (context.isBackground) {
context.isBackground = false;
Log.v("Alalytics", "Forground...");
}
然后...创建方法来检查应用程序是前景或背景的天气
/ ** *检查应用程序是否在前台 * * @param上下文 * @return true,如果在前景中 ** /
private boolean isInForeground(Context context) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses == null) {
return false;
}
final String packageName = context.getPackageName();
for (RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND
&& appProcess.processName.equals(packageName)) {
return true;
}
}
return false;
}
答案 4 :(得分:0)
由于声誉不佳,我无法添加评论,因此我将为Reddy Raaz添加新答案: 这样您就需要其他权限,这可能会阻止某些用户安装该应用。 该框架仅在从头开始时才调用Application.onCreate方法。这样,您可以在没有其他许可的情况下可靠地获取信息。