应用程序在从浏览器返回时崩溃

时间:2014-10-04 06:52:02

标签: android android-fragments

我有主要活动打开像这样的碎片。

Fragment fragment = null;

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

switch (position) {
case 0:
    fragment = new MyFragment();
    break;
default:
    break;
}

if (fragment != null) {
    fragmentManager.beginTransaction().replace(R.id.frame_container,fragment).commit();

}

此片段包含列表视图。在点击列表项新活动打开这样。

Intent intent = new Intent(getActivity(), MyActivity.class);
startActivity(intent);

在此活动中,我在浏览器中打开了一个链接。

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);

现在问题就出现了。如果我们打开一个简单的Web链接,它工作正常,但如果链接包含Play商店的应用程序链接,则从浏览器App返回时崩溃。在Htc和Nexus设备上,它工作正常,但在从浏览器返回时三星S3应用程序崩溃。

From Debuging我发现我的Main片段在Samsung S3设备上为空。

我的Log Cat显示了这一点。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.codenterprise.CashbackKorting/com.codenterprise.left.fragment.shops.ShopComplateDetailActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
    at android.app.ActivityThread.access$600(ActivityThread.java:140)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4898)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
    at com.codenterprise.general.Services.<init>(Services.java:74)
    at com.codenterprise.general.Services.<init>(Services.java:70)
    at com.codenterprise.left.fragment.shops.ShopComplateDetailActivity.onCreate(ShopComplateDetailActivity.java:90)
    at android.app.Activity.performCreate(Activity.java:5206)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)

由于

1 个答案:

答案 0 :(得分:6)

内存较少的设备会在您的应用程序转到后台时杀死您的应用程序以节省内存。因此,尝试在转到浏览器之前和之后保存并恢复应用程序的状态,如下面的代码

保存状态

 @Override
 protected void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
 }

并在同一活动中检索

@Override
 protected void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
 }