如何在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);
我希望这可以帮助某人=)