我正在编写的应用程序会检查/sdcard下的目录中是否有一个特殊的zip文件,如果没有,就会开始下载并解压缩。下载和解压工作finde,甚至与子目录。但我需要重启应用程序,当它完成-这不起作用。
首先,我有一个特殊的活动“PrimeActuth.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);
}
根据我的研究,我需要将main活动的上下文传递给downloadfile.java,但我仍然不知道如何传递。有谁能给我一个提示,告诉我如何将上下文传递给同一个包中单独文件中的异步任务吗?或者其他提示如何在异步任务完成后重新启动整个应用程序?
最佳答案
您需要创建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();