在AsyncTask完成后重新启动完整的Android应用程序

时间:2012-10-05 16:53:35

标签: android android-asynctask restart

我正在编码的应用程序检查/ sdcard下的目录中是否有特殊的ZIP文件,如果没有,则开始下载并解压缩。即使是子目录,下载和解压缩也可以工作。但是我需要在完成后重新启动应用程序 - 这不起作用。

起初我有一个特殊的活动“PreMainActivity.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;
}
}

然后我在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完成后重新启动整个应用程序?

2 个答案:

答案 0 :(得分: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);
}

从Activity可以将上下文传递为:

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

答案 1 :(得分:0)

只需重启你的main.activity:

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

查看问题: How do I restart an Android Activity