2012-10-05 126 views
4

我正在編碼的應用程序檢查/ sdcard目錄下是否存在特殊的ZIP文件,如果不是,則開始下載並解壓縮。即使有子目錄,下載和解壓縮工作也能完成。但是,我需要在完成時重新啓動應用程序 - 這並不起作用。AsyncTask完成後重新啓動完整的Android應用程序

起初我有一個特別的活動「PreMainActivity.java」只爲重啓purposal:

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; 
} 
} 

然後我得到了DownloadFile.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); 
} 

至於我有研究我需要將我的MainActivity的上下文傳遞給DownloadFile.java - 但我仍然不知道如何。任何人都可以暗示我一個提示如何將上下文傳遞給同一個包中的單獨文件中的AsyncTask?或者任何其他提示如何在AsyncTask完成後重新啓動整個應用程序?

+0

爲什麼需要在完成後重新啓動應用程序? – dorjeduck

+0

由於我下載的代碼是一個21MB-JavaScriptCode包,我需要在webview中爲應用程序工作 - 所以下載從應用程序首次啓動後開始。但下載完成後,我需要重新加載WebView。但是一個簡單的webview.reload()不起作用 - 重新加載活動 - 並且整個應用程序在一秒鐘內重新啓動。也許不是最好的方式 - 但應用程序的用戶經常面對在第一次啓動之後加載一些內容並且之後必須重新加載的應用程序。所以我決定走這條路:-) – Donny

+0

好的 - 我看到你有一個適合你的答案,所以不需要再從我身邊詳細說明;-) – dorjeduck

回答

1

您需要創建的AsyncTask的構造函數傳遞當前活動上下文爲:

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); 
} 

和活動,你可以通過上下文:

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

是的!現在我明白了!它按預期工作 - 非常感謝! :-) – Donny

0

只需重新啓動main.activity像這樣:

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

查看問題: How do I restart an Android Activity

+0

不幸的是,這個代碼snipplet可以在MainActivity中使用 - 但不在AsyncTask Class下面的方法中。無論如何感謝你的郵件 - 我會記住,也許我需要這個在另一個項目上:-) – Donny

相關問題