将活动发送到后台而不完成

时间:2010-01-11 12:53:38

标签: android android-activity

如何在不调用finish()方法的情况下将活动转到后台并返回启动此活动的Parent活动?我尝试了很多,但我找不到解决方案。所以如果你们能帮助我,我会非常感激。

5 个答案:

答案 0 :(得分:39)

如果Activity在与其父级不同的任务中运行,则以下内容将起作用。要实现此目的,请参阅http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

public void onBackPressed () {
    moveTaskToBack (true);
}

当前任务将被隐藏,但其状态将保持不变,当它被重新激活时,它将显示为您离开时的状态。

答案 1 :(得分:2)

如果您要在后台缓存/存储/处理数据,可以使用AsyncTaskThread

当你准备好缓存/转换到父级时,你会在你的一个子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);     }