在进行新活动时在后台运行应用程序

时间:2013-08-15 21:08:27

标签: java android android-intent android-activity

我有以下代码,可以在我的社交个人资料中打开浏览器:

    ImageView iv1 = (ImageView) dialog.findViewById(R.id.imgFB);
    iv1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Uri uri = Uri.parse("https://www.facebook.com/profile");                
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);  
            }
    });

现在,当我选择浏览器打开配置文件,然后按返回时,它不仅会关闭浏览器,还会关闭我的应用。在保持我的应用程序在后台运行的同时关闭浏览器的任何方法?

更新

这很好用:

ImageView iv1 = (ImageView) dialog.findViewById(R.id.imgFB);
iv1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Uri uri = Uri.parse("https://www.facebook.com/PagesByZ"); //Uri.parse("market://details?id=" + facebookpackagename); 
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        dialog.dismiss();
        startActivity(intent);  
    }
});

现在我没有收到错误,但是当Complete action using窗口出现而不是选择一个选项我只按回来,我的应用程序就关闭了。任何想法如何解决它所以如果我按回它它回到我的应用程序而不是主页?

更新:以下是帮助更好地了解问题的重写措辞。

在我的应用程序中,我有一个用于打开浏览器的图像链接,但如果用户安装了多个浏览器,则会显示“使用完整操作”窗口,我可以在其中进行选择。如果我按后退按钮它应该关闭它回到我的应用程序。相反,正在发生的事情是,如果我按下后退按钮,我的应用程序就会关闭,我将被带回主屏幕

enter image description here

我的主要活动: http://pastebin.com/FVwEKLAT

我的AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sikni8.tollculator"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.sikni8.tollculator.MainActivity"
            android:label="@string/app_name"
            android:noHistory="true"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.sikni8.tollculator.CurrentTrip"
            android:label="@string/title_activity_current_trip"
            android:parentActivityName="com.sikni8.tollculator.MainActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.sikni8.tollculator.MainActivity" />
        </activity>
        <activity
            android:name="com.sikni8.tollculator.DisplayTrip"
            android:label="@string/title_activity_display_trip"
            android:parentActivityName="com.sikni8.tollculator" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.sikni8.tollculator" />
        </activity>
        <activity
            android:name="com.sikni8.tollculator.ShowHelp"
            android:label="@string/app_name" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.sikni8.tollculator.MainActivity" />
        </activity>
        <activity
            android:name="com.sikni8.tollculator.ShowSettingOptions"
            android:label="@string/app_name" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.sikni8.tollculator.MainActivity" />
        </activity>
    </application>

</manifest>

如何确保如果用户改变主意不转到浏览器并按下后退按钮,它就会回到我的应用程序而不是转到主屏幕?

还会修复上面的修复程序,如果他们转到浏览器并按下将关闭浏览器的后面,我的应用程序将返回查看?

2 个答案:

答案 0 :(得分:2)

也许正在尝试从一个也关闭的Activity(你的MainActivity)中显示一个对话框......你在点击ImageView后是否触发了一个对话框?

同样请参阅this post。 (因为你的日志显示“com.myapp.tollculator.MainActivity已泄露窗口”)

答案 1 :(得分:1)

一些可能的原因/解决方案:

  1. 我无法相信这是原因,但您的应用程序是否可能因为您的应用程序或Web浏览器应用程序使用太多内存,或者您在低端设备上进行测试而被关闭?

  2. 另外,请尝试下一个标志的组合:FLAG_ACTIVITY_NEW_TASK,FLAG_ACTIVITY_NO_HISTORY,FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET。也请尝试

  3. 请检查其他设备上发生的情况。甚至是模拟器。

  4. 请在打开对话框时显示一些日志,然后按回来。

  5. 请转到设备的设置,看看是否打开了选项(在开发部分中)“不保留活动”。

  6. 请使用您使用的对话框创建一个全新的项目,然后尝试一下。也许这超出了你的想法......

  7. 显示您正在使用的活动的清单部分。

  8. 确保代码中的任何地方都没有“finish()”的调用吗?