我正在尝试实现一个按钮,这将导致我的应用程序返回到第一个活动,并表现得好像它(几乎)重新开始.这段代码
Intent newIntent =
new Intent(currentActivity.getApplicationContext(), StartActivity.class);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + Intent.FLAG_ACTIVITY_CLEAR_TASK);
currentActivity.startActivity(newIntent);
Run Code Online (Sandbox Code Playgroud)
对于运行Android 4.1的较新平板电脑似乎工作正常,但它不适用于运行Android 2.3.4的旧设备.
我发现了几个关于此的线索:
Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK无法使用Android
阅读细则让我相信我应该使用android-support-v4.jar中的IntentCompat类,http://developer.android.com/reference/android/support/v4/content/IntentCompat.html
不幸的是,文档中没有任何示例,我不确定如何使用IntentCompat.我发现的唯一例子是:不用android 2.3启动MainActivity
这让我相信我应该这样做:
Intent newIntent = IntentCompat.makeRestartActivityTask(cn);
Run Code Online (Sandbox Code Playgroud)
但是这给了我一个编译器错误,说"makeRestartActivityTask"是一个未定义的符号.
我猜这意味着我没有正确地将android-support-v4.jar添加到我的构建环境(IntelliJ IDEA 12社区版),但我尝试过几种不同的方式,但它仍然不起作用.
所以我有两个问题:
我尝试使用IntentCompat看起来是否正确?
如何让编译器停止说"makeRestartActivityTask"是一个未定义的符号?
我正在接受DeadObjectException我的代码.下面,我描述了我的设置,以及我试图解决的问题.
一个Service 小号从开始Application 一个.
Activity B(来自另一个应用程序)使用Messenger和IBinder接口与该服务进行通信.此活动也是从同一服务开始的.按下此按钮内的按钮,我应该将消息发送回服务.我经常DeadObjectException按下按钮.
我知道最可能的原因是 - 系统被杀死并重新启动服务,并且活动有旧的引用.除此之外,我还没有在网上找到太多的信息.
这是我尝试过的:
startForeground()在服务中使用过,我可以看到服务正在运行(通知区域中的通知).我仍然有例外.BroadcastReceiver,并调用finish()在onReceive()).问题是,如果活动暂停,Intent则不会传递给它.此外,我看到onDestroy()被简单地命中,因为Android管理活动生命周期,意图不保证交付给它.我也试过扩展这个stackoverflow问题中BaseActivity提到的.FLAG_ACTIVITY_CLEAR_TASK(除了通常FLAG_ACTIVITY_NEW_TASK),没有更好的结果.现在,我觉得好像没有选择.有没有人遇到类似的问题?有什么我可以尝试的吗?是否有可能捕获异常然后重新绑定服务?
我想在开始新的Activity意图时清除backstack.
我的问题的具体情况如下:我有这样的活动A> B> C> D> E"A"是注册活动,"B"是确认注册活动.我希望当用户启动活动"B"时他不能再回到活动"A",当用户达到活动"C"时,活动"A"和"B"都没用,我不需要用户再回到他们身边了.
此外,当用户从"C"移动到活动"D"时,他可以回到"C"但是如果他进一步移动到"E"活动,他就不能回到之前的任何"C"或"D" "活动.
经过大量的研究,我得到的最好的是使用flag:FLAG_ACTIVITY_NO_HISTORY,但它对我的情况有两个问题:
到目前为止我找不到这个问题的解决方案,我认为如果有什么东西可以清除当前任务的后台,那会更容易!
我的最低SDK支持是5.
提前致谢.