2010-01-11 3 views
15

finish() 메서드를 호출하지 않고 백그라운드에서 활동을 시작하고이 작업을 시작한 상위 활동으로 돌아갈 수 있습니까? 나는 너무 많이 노력했지만 해결책을 찾지 못했습니다. 그래서 너희들이 도울 수 있다면 나는 매우 감사 할 것이다.작업을 완료하지 않고 백그라운드로 보내기

+2

활동을 백그라운드로 보내면 무엇을 달성 할 수 있습니까? –

+0

실제로 나는 캐시 된 데이터가 필요합니다. 부모 작업은 동적으로 처음로드 된 다음 자식 작업으로 보냅니다. 자식 작업은 데이터를 수정하고 수정 된 데이터가 있어야합니다. 그러나 완료되면 있어야합니다. , 이전 데이터가 자식 활동에 전송됩니다 – 1HaKr

답변

37

활동이 상위 작업과 다른 작업에서 실행되는 경우 다음이 작동합니다. 이를 위해 http://developer.android.com/guide/topics/manifest/activity-element.html#lmode을 참조하십시오.

public void onBackPressed() { 
    moveTaskToBack (true); 
} 

현재 작업

는 숨겨집니다 만, 그 상태가 그대로 유지되며,이 활성화 될 때 당신이 그것을 떠날 때 그것이 단지로 나타납니다.

+4

활동 상태가 변경되지 않는다고 보장 할 수는 없습니다. 모든 가능성 있음, 활동은 운영 체제에 의해 파괴된다. 생명주기 이벤트에 응답하고 그에 따라 상태를 저장/복원하지 않는 한, 활동은 생성되고 역으로 이동되었음을 알지 못할 것입니다. – Jonathan

+2

Jonathan은 백그라운드 활동이 계속 실행된다는 _guarantee_가 없다는 사실이 맞습니다. 그러나 정상적인 상황에서 그들은 약간의 시간이 지날 때까지 운영 체제에 의해 파괴되지 않습니다. 파괴가 당신을 위해 문제를 일으키는 경우에, 다른 논평자가 말한대로 당신은 국가를 저장하고 복구해야한다. – mhsmith

+0

그래서 onSaveInstanceState()를 사용하면 내 상태를 나중에 복구 할 수 있습니다. – JohnyTex

0

시도 :이 방법을 사용하는 경우

Intent toNextActivity = new Intent(CurrentActivity.this, 
            NextActivity.class); 
CurrentActivity.startActivity(toNextActivity); 

는, CurrentActivity의 방법 onPause()가 호출을 받고 CurrentActivity의 (a MediaPlayer를 객체처럼) 정적 변수가있는 경우는 (존재하는 것 또는 재생중인 경우 재생하십시오.)

저는 이것을 내 애플리케이션에서 사용하고 있지만 서비스를 사용하여이를 수행하는 더 좋은 방법을 발견했습니다.

희망이 도움이 될 것입니다!

+0

내가 원하는 것은 이것을 시작한 부모 활동으로 돌아가는 것입니다. 새로운 활동이 아닙니다. – 1HaKr

+0

의도를 사용하여 새 활동으로 전환하면 onPause와 같은 일반적인 수명주기 활동 만 실행됩니다()'와'onStop()'을 사용합니다. 새로운 활동이로드되고 실행되는 동안 프로세스가 계속 실행됩니다. 솔루션에 대한 내 대답을 참조하십시오. – stormin986

2

캐시/저장/처리하려는 데이터가있는 경우 AsyncTask 또는 Thread을 사용할 수 있습니다.

당신이 부모/전환을 캐시 할 준비가되면, 당신은 당신의 아이의 활동 방법 중 하나에서 다음과 같이 할 것이다 (당신이에 startActivityForResult와 아이를 시작 가정을())

스레드 접근 :

Thread t1 = new Thread(new Runnable() { 

     @Override 
     public void run() { 
      // PUT YOUR CACHING CODE HERE 

     } 
}); 

t1.start(); 

setResult(whatever); 
finish(); 

새 스레드에서 다시 통신해야하는 경우 Handler을 사용할 수도 있습니다.

AsyncTask를 접근하십시오 AsyncTask를 사용하면 새 스레드에서 뭔가를 처리하지만, UI 프로세스를 다시 의사 소통을 할 수 있어야하는 상황이다

new CacheDataTask().execute(data params); 
set_result(whatever); 
finish(); 

.

0

작업을 뒤로 이동하면 Activity주기주기 이벤트에 응답하여 수동으로 수행하지 않는 한 상태를 유지할 수 없습니다.

당신은 당신이 startActivityForResult()를 사용, 두 번째 Activity에서 다시 결과를 수신해야하는 경우 Intent를 통해 두 번째 ActivitystartActivity()를 사용하거나 시작해야합니다. 이렇게하면 사용자가 Activity을 완료하고 처음 Activity으로 돌아올 때 콜백을 수신 할 수 있습니다.

시작하는 Activity 및 얻는 결과 : http://developer.android.com/reference/android/app/Activity.html#StartingActivities

0

간단히

보호 무효 minimizeApp() { 의도 startMain = 새로운 의도 (Intent.ACTION_MAIN); startMain.addCategory (Intent.CATEGORY_HOME); startMain.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); startActivity (startMain); }

관련 문제