如何在不调用finish()
方法的情况下将活动转到后台并返回启动此活动的Parent活动?我尝试了很多,但我找不到解决方案。所以如果你们能帮助我,我会非常感激。
答案 0 :(得分:39)
如果Activity在与其父级不同的任务中运行,则以下内容将起作用。要实现此目的,请参阅http://developer.android.com/guide/topics/manifest/activity-element.html#lmode。
public void onBackPressed () {
moveTaskToBack (true);
}
当前任务将被隐藏,但其状态将保持不变,当它被重新激活时,它将显示为您离开时的状态。
答案 1 :(得分:2)
如果您要在后台缓存/存储/处理数据,可以使用AsyncTask或Thread。
当你准备好缓存/转换到父级时,你会在你的一个子Activity方法中执行类似下面的操作(假设你使用startActivityForResult()启动了孩子)
线程方法:
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// PUT YOUR CACHING CODE HERE
}
});
t1.start();
setResult( whatever );
finish();
如果您需要从新主题回复任何内容,也可以使用Handler。
AsyncTask方法:
new CacheDataTask().execute( data params );
set_result( whatever );
finish();
AsyncTask适用于需要在新线程中处理某些内容但能够与UI过程进行通信的情况。
答案 2 :(得分:0)
尝试:
Intent toNextActivity = new Intent(CurrentActivity.this,
NextActivity.class);
CurrentActivity.startActivity(toNextActivity);
如果你使用这种方式,将调用CurrentActivity中的onPause()方法,如果你在CurrentActivity中有一个静态变量(如MediaPlayer对象),它将继续存在(或者如果正在播放则播放).. < / p>
我在我的应用程序中使用它,但我找到了一种更好的方法来实现服务。
希望这会对你有帮助!
答案 3 :(得分:0)
向后移动任务不会确保您将维护任何状态,除非您通过响应Activity
生命周期事件手动执行此操作。
您应该使用Activity
通过Intent
开始第二个startActivity()
,或者,如果您需要从第二个Activity
收到结果,请使用{{1 }}。这样,您就可以在用户完成startActivityForResult()
后收到回调并返回到您的第一个Activity
。
开始Activity
并获得结果:http://developer.android.com/reference/android/app/Activity.html#StartingActivities
答案 4 :(得分:0)
简单
protected void minimizeApp(){ Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); }