如何在Android中完成当前活动

我有一个Android应用程序。 我正在制作一个进度条加载屏幕。

我在onCreate方法中input了一个延迟。 当定时器完成后,我想完成当前的活动,并开始一个新的。

它只是在调用finish()方法时给我一个例外。

 public class LoadingScreen extends Activity{ private LoadingScreen loadingScreen; Intent i = new Intent(this, HomeScreen.class); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.loading); CountDownTimer timer = new CountDownTimer(10000, 1000) //10 second Timer { public void onTick(long l) { } @Override public void onFinish() { loadingScreen.finishActivity(0); startActivity(i); }; }.start(); } } 

如何更改代码,使其在进度条完成时结束?

如果您正在执行加载屏幕,只需将该参数设置为不保留在活动堆栈中。 在你的manifest.xml中,你定义你的活动的地方是:

 <activity android:name=".LoadingScreen" android:noHistory="true" ... /> 

而在你的代码中,不需要再调用.finish()。 只要做startActivity(i);

也不需要将您当前活动的实例保留在单独的字段中。 您可以随时访问它,如LoadingScreen.this.doSomething()而不是private LoadingScreen loadingScreen;

我尝试使用这个例子,但它失败了。 每次我用一个处理程序调用finish()/ finishactivity()时,最终都会遇到这个恶毒的java.lang.IllegalAccess Exception 。 我不确定那个提出问题的人是如何工作的。

相反,我发现的解决scheme是在您的活动中创build一个方法,如

 void kill_activity() { finish(); } 

从处理程序的run方法中调用此方法。 这对我来说就像一个魅力。 希望这可以帮助任何人挣扎着“如何从另一个线程closures活动?”。

你需要从UI线程调用finish() ,而不是后台线程。 做到这一点的方法是声明一个处理程序,并要求处理程序在UI线程上运行一个Runnable。 例如:

 public class LoadingScreen extends Activity{ private LoadingScreen loadingScreen; Intent i = new Intent(this, HomeScreen.class); Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler = new Handler(); setContentView(R.layout.loading); CountDownTimer timer = new CountDownTimer(10000, 1000) //10seceonds Timer { @Override public void onTick(long l) { } @Override public void onFinish() { handler.post(new Runnable() { public void run() { loadingScreen.finishActivity(0); startActivity(i); } }); }; }.start(); } } 

只需调用finish()方法:

 context.finish(); 

当你想开始一个新的活动,并完成当前的活动,你可以这样做:

API 11或更高版本

 Intent intent = new Intent(OldActivity.this, NewActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 

API 10或更低

 Intent intent = new Intent(OldActivity.this, NewActivity.class); intent.setFlags(IntentCompat.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 

我希望这可以帮助某人=)

Interesting Posts