18

如何在不调用其finish()方法的情况下使活动进入后台并返回启动此活动的父活动?我尝试了很多,但我找不到解决方案。因此,如果你们能提供帮助,我将非常感激。

4

5 回答 5

46

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

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

当前任务将被隐藏,但其状态将保持不变,并且当它重新激活时,它会像您离开时一样显示。

于 2011-08-15T21:57:03.847 回答
2

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

当您准备好缓存/过渡到父级时,您将在您的子级 Activity 方法之一中执行以下操作(假设您使用 startActivityForResult() 启动子级)

线程方法:

Thread t1 = new Thread(new Runnable() {

        @Override
        public void run() {
            // PUT YOUR CACHING CODE HERE

        }
});

t1.start();

setResult( whatever );
finish();

如果您需要从新线程返回任何内容,您也可以使用处理程序。

AsyncTask 方法:

new CacheDataTask().execute( data params );
set_result( whatever );
finish();

AsyncTask 适用于您需要在新线程中处理某些内容但能够与 UI 进程进行通信的情况。

于 2010-04-28T03:02:25.100 回答
2

简单地

protected void minimizeApp() { Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 开始活动(开始主);}

于 2017-07-27T09:49:44.317 回答
0

向后移动任务并不能确保您将保持任何状态,除非您通过响应Activity生命周期事件手动执行此操作。

Activity您应该通过Intentusing开始第二个startActivity(),或者,如果您需要从第二个接收结果Activity,请使用startActivityForResult()。这允许您在用户完成Activity并返回您的第一个Activity.

启动Activity并获得结果:http: //developer.android.com/reference/android/app/Activity.html#StartingActivities

于 2012-02-19T04:34:28.747 回答
0

尝试:

 Intent toNextActivity = new Intent(CurrentActivity.this,
                                     NextActivity.class);
 CurrentActivity.startActivity(toNextActivity);

如果您使用这种方式,将调用 CurrentActivity 中的 onPause() 方法,并且如果您在 CurrentActivity 中有一个静态变量(如 MediaPlayer 对象),它将继续存在(或者如果正在播放,则播放)。

我在我的应用程序中使用它,但我找到了一种更好的方法来使用服务。

希望对你有帮助!

于 2010-01-11T13:08:08.633 回答