阻止Activity在后台执行某些操作

时间:2012-01-23 15:01:47

标签: android service background-process android-activity

我有以下情况: 我正在编写一个应用程序,它就像一个聊天客户端。它在启动时连接到服务器并正在侦听消息(网络事物由服务处理)。 我的问题是在签出后几秒钟(相关方法向服务器发送信号然后停止服务并调用finish()),应用程序似乎再次登录而不做任何事情(我可以​​在服务器日志中看到这一点) )。我不知道如何处理这个问题,我的意思是阻止我的应用程序在后台再次登录。 sign方法由在我的主活动的onCreate方法中创建的服务调用。我对android还不是很熟悉,我希望任何人都可以给我一个提示。 提前谢谢。

此致 SMAU

编辑代码添加: 我在logcat中认识到我收到一条消息,例如“在xxxx ms中安排重启崩溃的服务” initNetwork方法和计时器类缩短了,由于自动服务重启,只有很多网络内容不想自动执行。

public class NetworkService extends Service {

public static String path;
static ClientUserConfig myConfig;
private ChatKeys keys;

static Frontend_CS front_cs;
static Frontend_CK front_ck;

public static Boolean runOnce = true;

private String server_ip = "10.0.2.2"; 

private static PPAClientActivity MAIN_ACTIVITY;
private int serverConnectionTimer;

private HashedWheelTimer timer;

private final LinkedList<String> chatWindows = new LinkedList<String>();


class TimedChecksAndroid implements TimerTask {

        public void run(Timeout tmt) {
            String senderEmail;
            String senderFullname;
            LinkedList<String> list;
            int selection;
            int chatNum;

            ClientUserEntry user;

            if (serverConnectionTimer>=60){



}





@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onDestroy() {

    super.onDestroy();


    shutdownService();

    if (MAIN_ACTIVITY != null) {
        MAIN_ACTIVITY.showMessages(Consts.SERVICE_STOPPED);
    }
}

private void shutdownService() {

    Log.d("SERVICENET", "Shutdown reached.");

    if(NetworkService.front_cs.getServer_handler() != null) {
        Log.d("SERVICENET", "IF Block Sign OFF reached.");
        LinkedList<String> list = new LinkedList<String>();
        list.add(NetworkService.myConfig.getEmail());
        NetworkService.front_cs.getServer_handler().sendMessage(new UniversalContainerMessage(ppa.utils.Constants.CS_GOING_OFFLINE_OPCODE,list));
    }

}
@Override
public void onCreate() {

    Log.d("SERVICENET", "Service creation started.");

    super.onCreate();

    path = getExternalFilesDir(null).getAbsolutePath().toString() + "/"; // TODO erzeugt manchmal nullpointer?


    initNetwork();

    if (MAIN_ACTIVITY != null) {
        MAIN_ACTIVITY.showMessages(Consts.SERVICE_STARTED);
    }

}



private void initNetwork() {

    String fullname = null;
    String email = null;
    boolean cfgBuildSuccess = true;



    serverConnectionTimer = 0;
    timer = new HashedWheelTimer();
    timer.newTimeout(new TimedChecksAndroid(), ppa.utils.Constants.CHATCLIENT_CHECK_INTERVAL, TimeUnit.MILLISECONDS);
    //schedular = new SchedularDialog(this, false, myConfig, front_cs);

}

public String getPath() {
    return path;
}

public static void setMainActivity(PPAClientActivity activity) {
      MAIN_ACTIVITY = activity;
    }

}

1 个答案:

答案 0 :(得分:1)

有两种方法可以启动/停止服务。

  1. 服务以Context.startService()开头。要停止此类服务,您的活动应致电stopService(),否则服务本身应致电stopSelf()
  2. 服务以Context.bindService()开头。要停止绑定服务所有,调用bindService()的活动应致电unbindService()
  3. 当您通过方法1启动服务时,将调用您服务中的onStartCommand()方法,因为您没有,我假设您正在使用第二种方法。如果是这种情况,我的猜测是,您的所有活动都不是unbindService(),或者是在服务停止后调用bindService的活动。

    您可能需要查看Service API以获取有关如何启动/停止服务的示例。