2015-09-25 55 views
0

ios中有一项出色功能 - appdelegate中的一种方法,当整个应用返回到与用户的交互时,由ios调用。在android上,每个活动控制器上都有一个onResume()方法,它从外部运行相同的应用程序(取决于以前的活动)。所以你无法从内心或外部理解赛格的哪一方。例如,您希望每次从后台恢复时锁定应用的屏幕。如果您的应用程序中有大量活动并在它们之间流窜 - 您必须每次都传递布尔标志以显示目标活动理解它是从应用程序内部调用的(而不是从其他应用程序的返回)以及屏幕不应该被锁定。有没有更好的模式来捕捉隐藏\取消隐藏整个应用程序 - 就像在ios中一样?Android - 获取应用背景恢复事件 - 像iOS中的appdelegate一样iOS

回答

0

一种方法是拥有一个BaseActivity,您的所有活动都从中继承,并对活动进行计数。 实施例:

public class BaseActivity extends Activity { 

    private static int sActivitiesAlive; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (sActivitiesAlive == 0) { 
      onFirstActivityResume(); 
     } 
     sActivitiesAlive++; 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     sActivitiesAlive--; 
    } 

    protected void onFirstActivityResume() { 
     // Override in children activities 
    } 
} 
0

Android不具有等同的方法 - 最相似的回调的onResume()(which gets called whenever your activity resumes)。如果要跟踪用户是否在特定活动中处于活动状态,则可以在调用onPause()时手动存储Date,然后检查onResume()是否已经过去X分钟。

private static final long TIMEOUT = 60 * 1000; // 1 min 
long lastInteraction; 

lastInteraction = new Date().getTime(); // set in onPause() 
boolean isFromBackground = new Date().getTime() - lastInteraction > TIMEOUT; // check in onResume()