【问题标题】:Android : Can't restart an app after finishing it 2 timesAndroid:完成2次后无法重新启动应用程序
【发布时间】:2014-12-06 15:53:25
【问题描述】:

我目前正在开发一个 android 应用程序,该应用程序必须在插入 USB 时启动视频,并在拔下 USB 时关闭视频。当前的问题是:它只工作了两次,之后应用程序没有启动(在 log cat 中:bad process ...)。我完全是android(和java)的初学者。 这就是我的项目的工作方式: MainActivity 启动视频,循环打开。 我设置了一个接收器,它在插入 USB 时启动 MainActivity。 我有另一个接收器,它在 USB 拔出时触发

这是杀死我的 MainActivity 的活动:

public class OffPowerReceiver extends BroadcastReceiver { 

@Override
public void onReceive(Context context, Intent intent) {
//        Intent i = new Intent(context, MainActivity.class);
//        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ((Activity) context).finish();   

    }   
}   

我确定我做的事情并不好,也许这不是正确的事情。

这是我的主要活动的结束:

@Override
protected void onDestroy() {
    super.onDestroy();

}

感谢您的帮助!

日志:

10-12 17:26:01.159: E/AndroidRuntime(21814): FATAL EXCEPTION: main
10-12 17:26:01.159: E/AndroidRuntime(21814): Process: com.example.video1, PID: 21814
10-12 17:26:01.159: E/AndroidRuntime(21814): java.lang.RuntimeException: Unable to start receiver com.example.video1.OffPowerReceiver: java.lang.ClassCastException: android.app.ReceiverRestrictedContext cannot be cast to android.app.Activity
10-12 17:26:01.159: E/AndroidRuntime(21814):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2414)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at android.app.ActivityThread.access$1700(ActivityThread.java:135)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1272)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at android.os.Handler.dispatchMessage(Handler.java:102)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at android.os.Looper.loop(Looper.java:136)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at android.app.ActivityThread.main(ActivityThread.java:5001)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at java.lang.reflect.Method.invokeNative(Native Method)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at java.lang.reflect.Method.invoke(Method.java:515)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at dalvik.system.NativeStart.main(Native Method)
10-12 17:26:01.159: E/AndroidRuntime(21814): Caused by: java.lang.ClassCastException: android.app.ReceiverRestrictedContext cannot be cast to android.app.Activity
10-12 17:26:01.159: E/AndroidRuntime(21814):    at com.example.video1.OffPowerReceiver.onReceive(OffPowerReceiver.java:15)
10-12 17:26:01.159: E/AndroidRuntime(21814):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2407)
10-12 17:26:01.159: E/AndroidRuntime(21814):    ... 10 more 
10-12 17:26:05.223: W/BroadcastQueue(575): Unable to launch app com.example.video1/10091 for broadcast Intent { act=android.intent.action.ACTION_POWER_CONNECTED flg=0x4000010 }: process is bad

【问题讨论】:

  • 你怎么说。它工作2次?接收器是从清单还是 MainActivity 调用的?拔掉usb后是否应该关闭应用程序?
  • 您好,Harsha,接收者在清单中。它工作了 2 次,因为我这样做了,USB 线只是一个物理触发器:插入 USB 启动应用程序,拔下 USB 关闭应用程序......再一次,然后应用程序不会启动。我认为 android 会因为崩溃而杀死应用程序......
  • 如果意图被正确触发,那么它应该每次触发......检查日志并发布发生的异常
  • 是的,我确定我做错了什么,但不知道在哪里!我发布了异常,希望可以帮助你。如果你愿意,我可以给你完整的日志,谢谢你的时间
  • 您正在尝试将非活动上下文强制转换为活动。您需要在 Activity 的实例上调用 finish(),而不是广播接收器的 Context。

标签: java android restart


【解决方案1】:

您可以通过两种方式关闭应用程序。

  1. 以编程方式触发 USB 拔出呼叫的广播接收器,而不是添加到清单文件中。这样您就可以完成活动实例。

  2. onRecieve 广播消息,杀死应用程序的进程(可选,在最坏的情况下你可以使用它)

android.os.Process.killProcess(android.os.Process.myPid());

【讨论】:

  • 你永远不应该杀死一个应用程序。
  • @Doomsknight,我同意你的看法。但是很多应用程序在需要时使用它。
  • 永远不需要,除非你的应用设计得不好。
  • @Doomsknight,这不是关于设计,而是关于使用和考虑其他应用程序......即使我支持你,但在某些情况下,我也在 stackoverflow 中发现了这样的转换。 stackoverflow.com/questions/11035328/…
  • 感谢 Harsha 的建议 :-) !我理解你对 Doomsknight 的担忧,我同意,但正如你在我的第一篇文章中看到的那样,我是 java 的初学者,所以我不知道 .. 编码的好方法?而且它没有上市,只有进球数。我希望我的下一个应用程序能在 java/android 方面有更多的知识:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
相关资源
最近更新 更多