2016-06-24 3 views
1

여러 가지 활동이있는 Android 앱을 작성 중입니다. 앱이 '다시 시작'될 때 서버에서 체크인해야합니다 (새 시작, 잠긴 화면 또는 다른 앱에서 전환 등). 다른 말로하면, 같은 물건은 모든 활동의 onResume()으로 들어가야합니다.Android : 앱 재개시 무언가를하십시오.

체크인에는 AsyncTask가 시작되고 체크인에 실패하면 사용자 이름/암호 등을 묻는 메시지가 표시됩니다.

각 활동 (즉, 체크인 코드는 모든 활동에서 복제 됨)에서 동일한 onResume() 메소드를 유지함으로써 작업하는 것이 있습니다. 분명히 이것을 할 수있는 더 좋은 방법이 있습니다. 이게 뭐야?

답변

1

사용 사례에 따라 다릅니다. 모든 활동에 동일한 기능이 필요한 경우 기본 활동을 작성할 수 있습니다. 모든 활동이 그것을 확장 할 것입니다. 이 논리를 기본 활동의 onResume()으로 이동하면 모든 활동에이 논리가 적용됩니다.

이 방법을 사용할 수없는 경우이 논리를 별도의 컨트롤러 클래스로 옮기고이를 필요로하는 모든 작업에 사용할 수 있습니다. 이것은 좀 더 유연하며 코드 중복을 피하는 데 도움이됩니다. 당신이 BaseActivity를 정의 할 수 있습니다 onResume() 모든 활동에 확인해야하는 경우

public class MainActivity extends BaseActivity { 
/* your code */ 
} 
+0

매우 간단합니다!죄송합니다 upvote에 대한 명성이 충분하지 않습니다. –

+0

그게 좋습니다 :) 우리가 당신의 질문에 대답했다고 생각한다면, 당신이 생각하는 대답을 받아들이십시오. 고맙습니다. –

+0

@RamanKrishnan upvote는 필요하지 않습니다. 대답을 수락하는 것입니다. –

1

당신은 기본 활동 등을 만들 수 있습니다 이것으로부터 모든 활동을 확장하고 기초 활동의 onResume에서 자신의 일을 할 수 있습니다.

하지만 앱을 다시 시작할 때 물건을해야하는 경우 작업이 좀 더 복잡해질 수 있습니다. 앱이 다시 시작될 때 호출되는 직접 메소드는 없습니다. 아래와 같이 사용자 정의 활동의 라이프 사이클 콜백을

public class CustomComponentCallback implements ComponentCallbacks2 { 

     @Override 
     public void onTrimMemory(int level) { 
     if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) { 
      isAppWillResume = true; 
     } 
     } 

     @Override 
     public void onConfigurationChanged(Configuration newConfig) { 

     } 

     @Override 
     public void onLowMemory() { 

     } 
    } 

을 그리고 만들 :

그래서 아래처럼 Application 클래스의 사용자 지정 구성 요소 콜백을 만들 수 있습니다

private static final class CustomLifecycleCallbacks implements ActivityLifecycleCallbacks { 
    @Override 
    public void onActivityResumed(Activity activity) { 
     if(isAppWillResume){ 
      // do your staff 
      isAppWillResume = false; 
     } 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 

    } 
    //... 
} 

가에서 정적 부울 필드를 정의 귀하의 응용 프로그램 클래스는 아래와 같습니다 : 귀하의 콜백을 등록하십시오.

private static boolean isAppWillResume = true; 

그리고 응용 프로그램의 onCreate에 등록 할 사용자 정의 콜백 :

registerComponentCallbacks(new CustomComponentCallback()); 
registerActivityLifecycleCallbacks(new CustomLifeCycleCallbacks()); 

나는이 응용 프로그램이 다시 시작되면 감지하는 가장 좋은 방법인지 모르겠지만이 솔루션은 나를 위해 작동합니다.

편집 : BaseActivity로 모든 활동을 확장하고 싶지 않다면, 내가 작성한 맞춤 콜백 만 등록 할 수 있으며, 원하는대로 할 수 있습니다. 활동이 재개되면 전화가 걸립니다.

행운을 비네!

0

:

public abstract class BaseActivity extends AppCompatActivity { 

@Override 
protected void onResume() { 
    super.onResume(); 
    /* your code here*/ 
} 

} 

귀하의 모든 활동과 같은 BaseActivity에서 상속해야합니다