单击退出后应用程序仍然打开?怎么了?

时间:2017-11-29 19:15:27

标签: android eclipse google-play-services google-apps

今天我将Google Play服务库更新为适用于较新版本的应用。 Eclipse没有给我任何类型的错误,我编译它,当我在我的手机上测试工作正常然后我去菜单并选择退出并确认是肯定关闭它并且应用程序从屏幕上消失。 但当你点击手机底部的方块时(当你列出所有打开的应用程序时),应用程序仍在运行! o_O

在更新之前,应用程序正在关闭,现在退出后仍保持活动状态。但我不认为gps会导致这种问题。任何建议???

这是我的MainActivity.java(执行退出菜单过程的地方)

package com.myapp.radio;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
import android.media.AudioManager;
import android.os.Bundle;
import android.os.IBinder;
import android.view.Menu;
import android.view.MenuItem;
import com.myapp.radio.R;

public class BaseActivity extends Activity {

private Intent bindIntent;
private RadioService radioService;

private static boolean isExitMenuClicked;

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

    isExitMenuClicked = false;

    // Bind to the service
    bindIntent = new Intent(this, RadioService.class);
    bindService(bindIntent, radioConnection, Context.BIND_AUTO_CREATE);

    setVolumeControlStream(AudioManager.STREAM_MUSIC);
}

@Override
protected void onResume() {
    super.onResume();
    if (isExitMenuClicked == true)
        finish();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);

    if (radioService.getTotalStationNumber() <= 1) {
    }
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Intent i;

    final String thisClassName = this.getClass().getName();
    final String thisPackageName = this.getPackageName();

    if (item.getItemId() == R.id.radio) {
        if (!thisClassName.equals(thisPackageName + ".MainActivity")) {
            i = new Intent(this, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(i);
            return true;
        }

    } else if (item.getItemId() == R.id.exit) {
        String title = "Cerrar aplicación";
        String message = "¿Realmente desea salir?";
        String buttonYesString = "Si";
        String buttonNoString = "No";

        isExitMenuClicked = true;

        AlertDialog.Builder ad = new AlertDialog.Builder(this);
        ad.setTitle(title);
        ad.setMessage(message);
        ad.setCancelable(true);
        ad.setPositiveButton(buttonYesString,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        if (radioService != null) {
                            radioService.exitNotification();
                            radioService.stop();
                            radioService.stopService(bindIntent);
                            isExitMenuClicked = true;
                            finish();
                        }
                    }
                });

        ad.setNegativeButton(buttonNoString, null);

        ad.show();

        return true;

    } else if (item.getItemId() == R.id.about) {
        if (!thisClassName.equals(thisPackageName + ".AboutActivity")) {
            i = new Intent(this, AboutActivity.class);
            startActivity(i);
            return true;
        }

    } else if (item.getItemId() == R.id.facebook) {
        if (!thisClassName.equals(thisPackageName + ".FacebookActivity")) {
            i = new Intent(this, FacebookActivity.class);
            startActivity(i);
            return true;
        }
    } else if (item.getItemId() == R.id.twitter) {
        if (!thisClassName.equals(thisPackageName + ".TwitterActivity")) {
            i = new Intent(this, TwitterActivity.class);
            startActivity(i);
            return true;
        }
    }
    return super.onOptionsItemSelected(item);
}

// Handles the connection between the service and activity
private final ServiceConnection radioConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName className, IBinder service) {
        radioService = ((RadioService.RadioBinder) service).getService();
    }

    @Override
    public void onServiceDisconnected(ComponentName className) {
        radioService = null;
    }
};

protected void onCreate1(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

}

}

1 个答案:

答案 0 :(得分:0)

此行为与Google Play服务无关,这就是Android的运作方式。

当你离开任何应用程序时,它还活着一段时间。没有任何正在运行的活动,但Application实例处于活动状态。如果你在短时间后再次启动它 - 它开始很快,因为一些应用程序数据继承了以前的运行。例如,所有静态变量 - 它们仍然存在且包含先前的值。它可能会在重新启动的应用程序中导致非常复杂的错误,所以要注意这一点!

额外的生活时间取决于当前的条件。如果有足够的记忆 - 它会更长,不够 - 更快被杀死。