2013-01-02 1 views
0

일부 세부 사항을 내 db로 보내는 활동이 있지만 뒤로 단추를 누르면 중지됩니다. 백그라운드에서 실행할 수 있습니까? 서비스를 사용하면 문제를 해결할 수 있다고 들었지만 모든 수업이 활동으로 위축되어 가능한지 알고 싶습니다. onStop 메서드에서 일부 코드를 사용할 수 없습니까?백그라운드에서 활동 실행

+3

아니요, onStop이 빠르기 때문에 처리를 계속할 수 없습니다. 장기 실행 프로세스가있는 경우 프로세스를 백그라운드로 두어야하지만 사용자 상호 작용 프로세스에만 활동을 사용해야합니다. '서비스'로의 마이그레이션은 어렵지 않으며 노력할 가치가 있습니다. – 323go

+0

귀하는 서비스를 찾고 있습니다. 이 자습서 http://www.vogella.com/articles/AndroidServices/article.html을 확인하십시오. –

+0

내 앱이 어떤 종류의 타이머라고 가정 해 봅시다. 백그라운드에서 실행하고 싶지만 사용자가 다시 열 때 사용하고 싶습니다. 그는 그것을 활동 (activity)이라고 생각해야한다. 어떻게 나눌 것인가? 봉사 란 무엇이며 활동은 무엇인가? –

답변

1

당신은 모든 클래스가 사용자 인터페이스 논리에 임베디드 된 응용 프로그램 논리를 가지고 있다는 것을 의미한다고 가정하고있는 활동으로 작성되었다고 언급했습니다. 이것은 일반적으로 좋은 습관이 아닙니다. 애플리케이션 별 코드를 별도의 클래스로 마이그레이션해야합니다. 사용자 인터페이스 외부에서이 기능을 사용하면 애플리케이션에 다양한 이점이 있습니다.

질문에 대답하려면 Service의 하위 클래스로 응용 프로그램에서 백그라운드에서 기능을 수행하도록 할 수 있습니다. 멋진 설명을 위해 here을보십시오.

0

활동이 인 텐트를 사용하여 통신하는 서비스를 작성해야합니다. 따라서 서비스에 데이터를 전송하여 데이터베이스에 전송하면 서비스에서 활동을 알릴 수 있습니다. Activity가 서비스의 이벤트를 청취 할 때 Observer 패턴 (Java 및 Android의 Listener 및 기타 여러 이벤트 처리 시스템)을 구현합니다.

서비스를 폴링 할 수도 있지만 상태 업데이트를 얻는 데 선호되는 패턴은 아닙니다.

2

Heey,

서비스를 확장하는 새로운 클래스를 만듭니다. 필요한 재정의를 추가하십시오. 이 도움이 :)

1

당신은을 무시해야합니다

stopService(new Intent(getBaseContext(), ServiceClassName.class)); 

희망 : 당신이 서비스를 중지 할 수 있습니다

stopService(new Intent(getBaseContext(), ServiceClassName.class)); 

:

@Override 
public IBinder onBind(Intent intent) 
{ 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    //this service will run until we stop it 
      // This will execute when the service starts 


    return START_STICKY; //makes it sticky to keep it on until its destroyd 
} 

@Override 
public void onDestroy() 
{ 
    super.onDestroy(); 
      // when the service is destroyd 
} 

당신과 함께 서비스를 시작할 수 있습니다 onBackPressed 메서드를 사용하여 원하는 것을 수행 할 수 있습니다. 활동을 "숨기"(사용자가 '닫히는'것으로 보이므로) moveTaskToBack 메소드를 호출 할 수 있습니다.

+0

"moveTaskToBack"후에도 응용 프로그램이 계속 실행됩니까? –

+0

db 쓰기에 사용중인 '백그라운드'코드를 테스트해야합니다. 최소한 그것은 그것을 숨기기 전에 국가를 보존 할 것입니다. – DNax

+0

그리고 super.onBackPressed()를 사용해야합니까? 내 앱을 죽이는 방법이 아니기 때문에 나는 생각하지 않는다. –

관련 문제