相关疑难解决方法(0)

如何使用IntentCompat.makeRestartActivityTask()?

我正在尝试实现一个按钮,这将导致我的应用程序返回到第一个活动,并表现得好像它(几乎)重新开始.这段代码

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社区版),但我尝试过几种不同的方式,但它仍然不起作用.

所以我有两个问题:

  1. 我尝试使用IntentCompat看起来是否正确?

  2. 如何让编译器停止说"makeRestartActivityTask"是一个未定义的符号?

android android-intent

11
推荐指数
2
解决办法
6398
查看次数

如何在kill服务上处理DeadObjectException?

我正在接受DeadObjectException我的代码.下面,我描述了我的设置,以及我试图解决的问题.


一个Service 小号从开始Application 一个.

Activity B(来自另一个应用程序)使用MessengerIBinder接口与该服务进行通信.此活动也是从同一服务开始的.按下此按钮内的按钮,我应该将消息发送回服务.我经常DeadObjectException按下按钮.

我知道最可能的原因是 - 系统被杀死并重新启动服务,并且活动有旧的引用.除此之外,我还没有在网上找到太多的信息.

这是我尝试过的:

  • startForeground()在服务中使用过,我可以看到服务正在运行(通知区域中的通知).我仍然有例外.
  • 在系统重启时,我暂时没有得到此异常.
  • 例外是间歇性的.我没有百分之百的责备.但是,在以下场景中,我总是得到异常:
    1. 启动应用程序A(也启动服务S).
    2. 开始活动B,一切正常.
    3. 通过重新部署应用A重新启动服务.
    4. 导航到活动B. 发生异常.
    5. 此时,如果我重新启动活动B,则异常消失.
  • 这使我得出结论,如果我确保每次服务启动时活动B都是新的,那么这个例外就会消失.然后我尝试在开始之前向活动B提供谋杀意图.(活动具有BroadcastReceiver,并调用finish()onReceive()).问题是,如果活动暂停,Intent则不会传递给它.此外,我看到onDestroy()被简单地命中,因为Android管理活动生命周期,意图不保证交付给它.我也试过扩展这个stackoverflow问题中BaseActivity提到的.
  • 我也试过设置FLAG_ACTIVITY_CLEAR_TASK(除了通常FLAG_ACTIVITY_NEW_TASK),没有更好的结果.

现在,我觉得好像没有选择.有没有人遇到类似的问题?有什么我可以尝试的吗?是否有可能捕获异常然后重新绑定服务?

java android exception

7
推荐指数
1
解决办法
1304
查看次数

如何清除任务的后台堆栈并只留下新的活动?

我想在开始新的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,但它对我的情况有两个问题:

  1. 在活动"A",如果用户离开我的应用程序(例如到主屏幕),它会破坏该活动,因此用户输入的所有信息都将丢失!
  2. 活动"C"如果用户导航到"D"活动但是当用户移动到"E"活动时,我想将其保留在历史记录(backstack)中我想要删除它.

到目前为止我找不到这个问题的解决方案,我认为如果有什么东西可以清除当前任务的后台,那会更容易!

我的最低SDK支持是5.

提前致谢.

android

6
推荐指数
1
解决办法
8702
查看次数

标签 统计

android ×3

android-intent ×1

exception ×1

java ×1