2012-09-11 38 views
6

在我的应用程序中,活动A是启动器活动,从A称为B,从B称为C,我有5个以上的活动。在C中,当我按Home键时,再次打开我的应用程序,它打开C,这对我来说很好。但是在按下C中的home按钮之后,当它闲置一段时间并且应用程序被终止时,那么当我打开我的应用程序时,它会打开C.但是我想打开主要的启动程序活动。我怎样才能做到这一点?应用程序在按下主屏幕按钮后不会打开主要活动android

A> B> C> HOME按钮>空闲一段时间>应用杀>开放应用> C.

在这种情况下我想打开主活性的,而不是C.

+4

以及你如何认为该应用程序正在被杀死?这并不仅仅是因为你的应用在一段时间内处于空闲状态。如果它从C开始意味着它从未被杀死。只有当设备处于负载和内存不足的情况下,设备才会自动终止应用程序 –

+1

在ddms logcat中,显示进程已经死亡。 –

+0

@MhhirShah你有没有找到解决这个问题的方法? – Shri

回答

-1

按主页将您从应用切换到主屏幕,同时 让您的应用在后台运行。

除了当您的手机在内存等资源上运行不足时,它将开始关闭在后台运行的应用程序,因此您的手机拥有足够的资源用于您现在正在尝试执行的操作。 游戏常常是手机为了节省 资源而“杀死”的第一批应用程序,因为它们通常比其他应用程序使用更多的内存和CPU。 这就是为什么有时候你的游戏暂停运行,有时候 Android已经为你关闭了它。

+1

这实际上并没有回答被问到的问题。这应该是一个评论,而不是一个答案。 –

-2

压在家里,你还没有完成活动,它仍然存在stack.only它暂停,所以使用这个。

如果从活动A.andÇ的B调用活动B

A-> B

从A

,并再次B->ç

使用

使用startactivityforresult从B开始的活动结果

并且当你想从C退出然后setResult(即RESULT_OK)并在B中完成C和OnActivityResult()时,检查是否有r esultcode == RESULT_OK然后再结束B和的setResult(RESULT_OK)为A.same程序将按照说明完成A.

这将退出您从application.and应用程序将从不启动从C.

+0

这实际上并没有解决OP所具有的问题。如果Android杀死他的进程,当用户返回到应用程序时,它仍然会启动一个新进程并显示'C',这不是OP想要的。 –

0

您可以将android:clearTaskOnLaunch="true"放入活动A的清单中,让启动器始终转到该活动。

+0

我知道,但我想打开A只有当应用程序被杀害,不想按下主页按钮后总是打开A. –

-2

如果你的应用程序被系统杀死,我不认为它会从c开始。如果你通过任务杀手应用程序杀死它,那么它是一个错误。强制停止它的应用程序设置,然后检查。但是,如果杀死任务杀手应用程序,然后从C,如果你回到B,它正在崩溃,然后检查结果代码。如果resultcode!= RESULT_OK,那么你可以在这里处理你的代码,并保存应用程序崩溃。如果你还没有开始你的结果活动,然后在启动B和C之前完成B和A.

+1

这是错误的。如果Android杀死后台进程,它会记住任务堆栈的状态以及打开了哪些活动。当用户返回该任务时,Android会创建一个新的OS进程,并在堆栈**中恢复**顶部“Activity”的状态。在OP的情况下,它会创建一个'C'的新实例,因为当用户将任务放在后台时,这是堆栈顶部的'Activity'。 –

5

您将需要检测到Android已经终止了您的进程,然后用户返回到应用程序(导致Android创建新进程)。我已经描述了如何在众多的答案做到这一点:

https://stackoverflow.com/a/29802601/769265

https://stackoverflow.com/a/27276077/769265

https://stackoverflow.com/a/11249090/769265

+0

David,在第一个答案中,你建议在第一个活动的'onCreate()'中初​​始化一个布尔值。好。 Android杀死进程。用户再次启动应用程序。所有先前在backstack中的活动都会被创建并重新放入backstack,这意味着'FirstActivity'的onCreate()也会被调用,这将导致布尔值变为'true'。所以,每当你检查布尔值时,它总是“真”。我错过了什么吗? – azizbekian

+2

不,用户再次启动应用程序后,只有上次打开的活动被放在堆栈上(在OP的情况下为Activity C),并调用它的onCreate()。然后用户导航回B→onCreate()调用B,依此类推。我在我的应用程序中使用了David的解决方案!辉煌的解决方案,谢谢! – Damnum

+2

@azizbekian正如@Damnum所说,当Android创建一个新的OS进程时,它只会从堆栈创建最顶层的Activity。其他活动不会重新创建,直到用户返回。 –

0

您是否尝试过为启动后,它调用完成一个特定的时间onBackPressed线程和睡眠(),否则停止线程(从调用完成),并获得相同的活动。

相关问题