2012-10-05 4 views
4

코딩중인 앱이/sdcard 아래의 디렉토리에 특별한 ZIP 파일이 있는지 확인하고 그렇지 않은 경우 다운로드하고 압축을 풉니 다. 다운로드 및 압축 풀기 작업은 하위 디렉토리에서도 가능합니다. 하지만 끝나면 앱을 다시 시작해야합니다. 작동하지 않습니다.AsyncTask가 완료된 후 완전한 Android 앱 다시 시작

은 처음에는 특별한 활동 만 다시 시작 purposal은 "PreMainActivity.java"이 : 나는

@Override 
protected void onPostExecute(final String result) 
{ 

    MainActivity.mProgressDialogDownload.dismiss(); 
    PreMainActivity.ENABLE_RESTART = true; 
    final Intent i = new Intent(MainActivity.this, PreMainActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    startActivity(i); 
} 

지금까지 내가 가지고로 DownloadFile.java 내 일부 코드를 가지고 다음

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 

public class PreMainActivity extends Activity 
{ 

/** 
* 
*/ 
public static Boolean ENABLE_RESTART = false; 

@Override 
public void onCreate(final Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    PreMainActivity.ENABLE_RESTART = true; 
    restartMain(); 
} 

@Override 
public void onRestart() 
{ 

    super.onRestart(); 
    restartMain(); 
} 

/** 
* 
*/ 
public void restartMain() 
{ 

    if (PreMainActivity.ENABLE_RESTART == true) 
    { 
     final Intent mainIntent = new Intent(this, MainActivity.class); 
     mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(mainIntent); 
     finish(); 
    } 
    else 
    { 
     finish(); 
    } 
    PreMainActivity.ENABLE_RESTART = false; 
} 
} 

내가 MainActivity의 문맥을 DownloadFile.java에 전달할 필요가 있는지를 조사했지만, 아직 실마리가 없습니다. 누구나 같은 패키지 내의 별도의 파일에서 AsyncTask에 컨텍스트를 전달하는 방법에 대한 힌트를 얻을 수 있습니까? 또는 AsyncTask가 완료된 후 전체 응용 프로그램을 다시 시작하는 방법에 대한 다른 힌트를 원하십니까?

+0

왜 끝나면 응용 프로그램을 다시 시작해야합니까? – dorjeduck

+0

다운로드 코드는 21MB-JavaScriptCode 패키지로, 앱이 작동하려면 webview에서 필요하므로 앱을 처음 시작한 후 다운로드가 시작됩니다. 그러나 다운로드가 끝나면 WebView를 다시로드해야합니다. 그러나 간단한 webview.reload()는 작동하지 않습니다. 다시 액티비티를 다시로드하면 전체 앱이 다시 시작됩니다. 어쩌면 최선의 방법은 아니지만, 앱을 처음 사용하는 사용자는 앱을 처음 실행 한 후 일부 콘텐츠를로드하고 그 후에 다시로드해야하는 앱에 자주 직면 할 수 있습니다. 그래서 저는 이쪽으로 가기로 결정했습니다 :-) – Donny

+0

ok - 당신을 위해 잘 작동하는 답변을 얻었으므로 제 편에서 더 자세히 설명 할 필요가 없습니다 ;-) – dorjeduck

답변

1

당신은으로 현재 활동 컨텍스트를 전달하는 AsyncTask를의 생성자를 작성해야합니다 그냥 main.activity를 다시 시작

AsyncTask_Class_Name asyktaskobj=new AsyncTask_Class_Name(this); 
asyktaskobj.execute(); 
+0

예! 이제 나는 그 요지를 얻었습니다! 그것은 예상대로 작동합니다 - 정말 고마워요! :-) – Donny

0

: 당신은 상황을 전달할 수 있습니다

public Context ctx; 

    public Your_AsyncTask_Class_Name (Context context){ 
     super(); 
     this.ctx=context; 

    } 
    ...... 
@Override 
protected void onPostExecute(final String result) 
{ 

    MainActivity.mProgressDialogDownload.dismiss(); 
    PreMainActivity.ENABLE_RESTART = true; 
    final Intent i = new Intent(ctx, PreMainActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    startActivity(i); 
} 

및 활동에서 like :

Intent intent = getIntent(); 
finish(); 
startActivity(intent); 

질문 찾기 : How do I restart an Android Activity

+0

불행히도이 코드 스 니펫은 MainActivity 내에서 작동하지만 AsyncTask 클래스 아래의 메서드에서는 작동하지 않습니다. 어쨌든 당신의 포스트에 감사드립니다. 나는 마음 속에 간직 할 것입니다, 어쩌면 제가 annother 프로젝트에서 이것을 필요로 할 수도 있습니다 :-) – Donny

관련 문제