延迟应用程序关闭并发送消息

Delay application close and make an send a message

实际上我有一个 TCP 客户端,它 onStart 连接到服务器并将设备 IP 和号码发送给它,但现在我希望当应用程序关闭时( onDestroy )延迟几秒钟(重新打开的正确时间连接并发送另一条消息)并发送另一条消息,其中我说设备处于离线状态。

我已经尝试过使用 onDestroy 方法,但它可能很疯狂,而且很明显

那没有用(我尝试在 onDestroy 上做以下事情:

protected void onDestroy() {

  new ConnectTask().execute("");

  if (client != null) {

    client.sendMessage(trm +"OFFLINE");

  }

  if (client != null) {

    client.stopClient();

  }



  super.onDestroy();

  server.onDestroy();

}public class MainActivity extends AppCompatActivity {

Server server;

static Client client;

settings Settings;

public static TextView terminale, indr, msg;

TextView log;

static TextView msgServer;

static String ipp;

static String trm;

static DataBaseHandler myDB;

allert Allert;

SharedPreferences prefs;

String s1 ="GAB Tamagnini SRL ?? 2017 \

" +

   "Via Beniamino Disraeli, 17,\

" +

   "42124 Reggio Emilia \

" +

   "Telefono: 0522 / 38 32 22 \

" +

   "Fax: 0522 / 38 32 72 \

" +

   "Partita IVA, Codice Fiscale \

" +

   "Reg. Impr. di RE 00168780351 \

" +

   "Cap. soc. a?? 50.000,00 i.v. \

" +"" +

   "REA n. RE-107440 \

" +

   "presso C.C.I.A.A. di Reggio Emilia";

ImageButton settings, helps, allerts, home;





@Override

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  Utils.darkenStatusBar(this, R.color.colorAccent);

  server = new Server(this);

  myDB = DataBaseHandler.getInstance(this);



  msg = (TextView) findViewById(R.id.msg);

  log = (TextView) findViewById(R.id.log_avviso);

  settings = (ImageButton) findViewById(R.id.impo);

  helps = (ImageButton) findViewById(R.id.aiut);

  allerts = (ImageButton) findViewById(R.id.msge);

  home = (ImageButton) findViewById(R.id.gab);

  terminale = (TextView) findViewById(R.id.terminal);

  indr = (TextView) findViewById(R.id.indr);

  msgServer = (TextView) findViewById(R.id.serverMSG);



  final Cursor cursor = myDB.fetchData();

  if (cursor.moveToFirst()) {

    do {

      indr.setText(cursor.getString(1));

      terminale.setText(cursor.getString(2));

      Client.SERVER_IP = cursor.getString(1);

      trm = cursor.getString(2);

    } while (cursor.moveToNext());

  }





  startService(new Intent(MainActivity.this,FinalizingOperationsService.class));



  WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);

  ipp = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());



  startConnection.postDelayed(runnableConnection,5000);

  startMessage.postDelayed(runnableMessage,5500);



  cursor.close();

  server.Parti();





  home.setOnClickListener(new View.OnClickListener() {

                int counter = 0;

    @Override

    public void onClick(View view) {

                  counter++;

                  if (counter == 10) {

                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                    builder.setCancelable(true);

                    builder.setMessage(s1);

                    builder.show();

                    counter = 0;

                  }

    }

  });



  settings.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Intent impostazioni = new Intent(getApplicationContext(), settingsLogin.class);

      startActivity(impostazioni);

    }

  });



  helps.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Intent pgHelp = new Intent(getApplicationContext(), help.class);

      startActivity(pgHelp);

    }

  });



  allerts.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Server.count = 0;

      SharedPreferences prefs = getSharedPreferences("MY_DATA", MODE_PRIVATE);

      SharedPreferences.Editor editor = prefs.edit();

      editor.clear();

      editor.apply();

      msg.setVisibility(View.INVISIBLE);

      Intent pgAlert = new Intent(getApplicationContext(), allert.class);

      startActivity(pgAlert);

    }

  });



}



@Override

protected void onDestroy() {

  super.onDestroy();

  server.onDestroy();

}



public static class ConnectTask extends AsyncTask<String, String, Client> {



  @Override

  protected Client doInBackground(String... message) {





    client = new Client(new Client.OnMessageReceived() {

      @Override



      public void messageReceived(String message) {



        publishProgress(message);



      }

  });

    client.run();



    return null;

  }



  @Override

  protected void onProgressUpdate(String... values) {

    super.onProgressUpdate(values);



      msgServer.setTextColor(Color.parseColor("#00FF00"));

      msgServer.setText("ONLINE");



    Log.d("test","response" + values[0]);

  }

}



static Handler startConnection = new Handler();

static Runnable runnableConnection = new Runnable() {

  @Override

  public void run() {



    new ConnectTask().execute("");

  }

};



static Handler startMessage = new Handler();

static Runnable runnableMessage = new Runnable() {

  @Override

  public void run() {

    final Cursor cursor = myDB.fetchData();

    if (cursor.moveToFirst()) {

      do {

        Client.SERVER_IP = cursor.getString(1);

        trm = cursor.getString(2);

      } while (cursor.moveToNext());

    }

    if (client != null) {

      client.sendMessage(ipp +"#" + trm);

    }

  }

};



static Handler startMessageClose = new Handler();

static Runnable runnableMessageClose = new Runnable() {

  @Override

  public void run() {

    if (client != null) {

      client.sendMessage(trm +"IS OFFLINE");

    }

    }

  };





}public class FinalizingOperationsService extends Service {



@Override

public IBinder onBind(Intent intent) {

  return null;

}



@Override

public int onStartCommand(Intent intent, int flags, int startId) {

  Log.d("FOService","Service Started");

  return START_STICKY;

}



@Override

public void onDestroy() {

  super.onDestroy();

  Log.d("FOService","Service Destroyed");

}



@Override

public void onTaskRemoved(Intent rootIntent) {

  Log.e("FOService","Service Ends");

  MainActivity.startConnection.removeCallbacks(MainActivity.runnableConnection);

  MainActivity.startConnection.postDelayed(MainActivity.runnableConnection,100);



  MainActivity.startMessageClose.removeCallbacks(MainActivity.runnableMessageClose);

  MainActivity.startMessageClose.postDelayed(MainActivity.runnableMessageClose,110);



  stopSelf();

  }

}public class FinalizingOperationsService extends Service {



    @Override

    public IBinder onBind(Intent intent) {

      return null;

    }



    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

      Log.d("FOService","Service Started");

      return START_STICKY;

    }



    @Override

    public void onDestroy() {

      super.onDestroy();

      Log.d("FOService","Service Destroyed");

    }



    @Override

    public void onTaskRemoved(Intent rootIntent) {

      Log.e("FOService","Service Ends");

      // write server updation code here

      // after completing code perform stopself() to stop this service;

    }

  }<service android:name=". FinalizingOperationsService" android:stopWithTask="false"/>

这是我调用 TCP 客户端并发送启动消息的 MainActivity 代码:

protected void onDestroy() {

  new ConnectTask().execute("");

  if (client != null) {

    client.sendMessage(trm +"OFFLINE");

  }

  if (client != null) {

    client.stopClient();

  }



  super.onDestroy();

  server.onDestroy();

}public class MainActivity extends AppCompatActivity {

Server server;

static Client client;

settings Settings;

public static TextView terminale, indr, msg;

TextView log;

static TextView msgServer;

static String ipp;

static String trm;

static DataBaseHandler myDB;

allert Allert;

SharedPreferences prefs;

String s1 ="GAB Tamagnini SRL ?? 2017 \

" +

   "Via Beniamino Disraeli, 17,\

" +

   "42124 Reggio Emilia \

" +

   "Telefono: 0522 / 38 32 22 \

" +

   "Fax: 0522 / 38 32 72 \

" +

   "Partita IVA, Codice Fiscale \

" +

   "Reg. Impr. di RE 00168780351 \

" +

   "Cap. soc. a?? 50.000,00 i.v. \

" +"" +

   "REA n. RE-107440 \

" +

   "presso C.C.I.A.A. di Reggio Emilia";

ImageButton settings, helps, allerts, home;





@Override

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  Utils.darkenStatusBar(this, R.color.colorAccent);

  server = new Server(this);

  myDB = DataBaseHandler.getInstance(this);



  msg = (TextView) findViewById(R.id.msg);

  log = (TextView) findViewById(R.id.log_avviso);

  settings = (ImageButton) findViewById(R.id.impo);

  helps = (ImageButton) findViewById(R.id.aiut);

  allerts = (ImageButton) findViewById(R.id.msge);

  home = (ImageButton) findViewById(R.id.gab);

  terminale = (TextView) findViewById(R.id.terminal);

  indr = (TextView) findViewById(R.id.indr);

  msgServer = (TextView) findViewById(R.id.serverMSG);



  final Cursor cursor = myDB.fetchData();

  if (cursor.moveToFirst()) {

    do {

      indr.setText(cursor.getString(1));

      terminale.setText(cursor.getString(2));

      Client.SERVER_IP = cursor.getString(1);

      trm = cursor.getString(2);

    } while (cursor.moveToNext());

  }





  startService(new Intent(MainActivity.this,FinalizingOperationsService.class));



  WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);

  ipp = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());



  startConnection.postDelayed(runnableConnection,5000);

  startMessage.postDelayed(runnableMessage,5500);



  cursor.close();

  server.Parti();





  home.setOnClickListener(new View.OnClickListener() {

                int counter = 0;

    @Override

    public void onClick(View view) {

                  counter++;

                  if (counter == 10) {

                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                    builder.setCancelable(true);

                    builder.setMessage(s1);

                    builder.show();

                    counter = 0;

                  }

    }

  });



  settings.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Intent impostazioni = new Intent(getApplicationContext(), settingsLogin.class);

      startActivity(impostazioni);

    }

  });



  helps.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Intent pgHelp = new Intent(getApplicationContext(), help.class);

      startActivity(pgHelp);

    }

  });



  allerts.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Server.count = 0;

      SharedPreferences prefs = getSharedPreferences("MY_DATA", MODE_PRIVATE);

      SharedPreferences.Editor editor = prefs.edit();

      editor.clear();

      editor.apply();

      msg.setVisibility(View.INVISIBLE);

      Intent pgAlert = new Intent(getApplicationContext(), allert.class);

      startActivity(pgAlert);

    }

  });



}



@Override

protected void onDestroy() {

  super.onDestroy();

  server.onDestroy();

}



public static class ConnectTask extends AsyncTask<String, String, Client> {



  @Override

  protected Client doInBackground(String... message) {





    client = new Client(new Client.OnMessageReceived() {

      @Override



      public void messageReceived(String message) {



        publishProgress(message);



      }

  });

    client.run();



    return null;

  }



  @Override

  protected void onProgressUpdate(String... values) {

    super.onProgressUpdate(values);



      msgServer.setTextColor(Color.parseColor("#00FF00"));

      msgServer.setText("ONLINE");



    Log.d("test","response" + values[0]);

  }

}



static Handler startConnection = new Handler();

static Runnable runnableConnection = new Runnable() {

  @Override

  public void run() {



    new ConnectTask().execute("");

  }

};



static Handler startMessage = new Handler();

static Runnable runnableMessage = new Runnable() {

  @Override

  public void run() {

    final Cursor cursor = myDB.fetchData();

    if (cursor.moveToFirst()) {

      do {

        Client.SERVER_IP = cursor.getString(1);

        trm = cursor.getString(2);

      } while (cursor.moveToNext());

    }

    if (client != null) {

      client.sendMessage(ipp +"#" + trm);

    }

  }

};



static Handler startMessageClose = new Handler();

static Runnable runnableMessageClose = new Runnable() {

  @Override

  public void run() {

    if (client != null) {

      client.sendMessage(trm +"IS OFFLINE");

    }

    }

  };





}public class FinalizingOperationsService extends Service {



@Override

public IBinder onBind(Intent intent) {

  return null;

}



@Override

public int onStartCommand(Intent intent, int flags, int startId) {

  Log.d("FOService","Service Started");

  return START_STICKY;

}



@Override

public void onDestroy() {

  super.onDestroy();

  Log.d("FOService","Service Destroyed");

}



@Override

public void onTaskRemoved(Intent rootIntent) {

  Log.e("FOService","Service Ends");

  MainActivity.startConnection.removeCallbacks(MainActivity.runnableConnection);

  MainActivity.startConnection.postDelayed(MainActivity.runnableConnection,100);



  MainActivity.startMessageClose.removeCallbacks(MainActivity.runnableMessageClose);

  MainActivity.startMessageClose.postDelayed(MainActivity.runnableMessageClose,110);



  stopSelf();

  }

}public class FinalizingOperationsService extends Service {



    @Override

    public IBinder onBind(Intent intent) {

      return null;

    }



    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

      Log.d("FOService","Service Started");

      return START_STICKY;

    }



    @Override

    public void onDestroy() {

      super.onDestroy();

      Log.d("FOService","Service Destroyed");

    }



    @Override

    public void onTaskRemoved(Intent rootIntent) {

      Log.e("FOService","Service Ends");

      // write server updation code here

      // after completing code perform stopself() to stop this service;

    }

  }<service android:name=". FinalizingOperationsService" android:stopWithTask="false"/>

打开连接的正确命令是new ConnectTask().execute("");

当我用 if (client != null) { client.sendMessage(ipp +"#" + trm); }

发送消息时

FinalizingOperationsService.java 代码:

protected void onDestroy() {

  new ConnectTask().execute("");

  if (client != null) {

    client.sendMessage(trm +"OFFLINE");

  }

  if (client != null) {

    client.stopClient();

  }



  super.onDestroy();

  server.onDestroy();

}public class MainActivity extends AppCompatActivity {

Server server;

static Client client;

settings Settings;

public static TextView terminale, indr, msg;

TextView log;

static TextView msgServer;

static String ipp;

static String trm;

static DataBaseHandler myDB;

allert Allert;

SharedPreferences prefs;

String s1 ="GAB Tamagnini SRL ?? 2017 \

" +

   "Via Beniamino Disraeli, 17,\

" +

   "42124 Reggio Emilia \

" +

   "Telefono: 0522 / 38 32 22 \

" +

   "Fax: 0522 / 38 32 72 \

" +

   "Partita IVA, Codice Fiscale \

" +

   "Reg. Impr. di RE 00168780351 \

" +

   "Cap. soc. a?? 50.000,00 i.v. \

" +"" +

   "REA n. RE-107440 \

" +

   "presso C.C.I.A.A. di Reggio Emilia";

ImageButton settings, helps, allerts, home;





@Override

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  Utils.darkenStatusBar(this, R.color.colorAccent);

  server = new Server(this);

  myDB = DataBaseHandler.getInstance(this);



  msg = (TextView) findViewById(R.id.msg);

  log = (TextView) findViewById(R.id.log_avviso);

  settings = (ImageButton) findViewById(R.id.impo);

  helps = (ImageButton) findViewById(R.id.aiut);

  allerts = (ImageButton) findViewById(R.id.msge);

  home = (ImageButton) findViewById(R.id.gab);

  terminale = (TextView) findViewById(R.id.terminal);

  indr = (TextView) findViewById(R.id.indr);

  msgServer = (TextView) findViewById(R.id.serverMSG);



  final Cursor cursor = myDB.fetchData();

  if (cursor.moveToFirst()) {

    do {

      indr.setText(cursor.getString(1));

      terminale.setText(cursor.getString(2));

      Client.SERVER_IP = cursor.getString(1);

      trm = cursor.getString(2);

    } while (cursor.moveToNext());

  }





  startService(new Intent(MainActivity.this,FinalizingOperationsService.class));



  WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);

  ipp = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());



  startConnection.postDelayed(runnableConnection,5000);

  startMessage.postDelayed(runnableMessage,5500);



  cursor.close();

  server.Parti();





  home.setOnClickListener(new View.OnClickListener() {

                int counter = 0;

    @Override

    public void onClick(View view) {

                  counter++;

                  if (counter == 10) {

                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                    builder.setCancelable(true);

                    builder.setMessage(s1);

                    builder.show();

                    counter = 0;

                  }

    }

  });



  settings.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Intent impostazioni = new Intent(getApplicationContext(), settingsLogin.class);

      startActivity(impostazioni);

    }

  });



  helps.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Intent pgHelp = new Intent(getApplicationContext(), help.class);

      startActivity(pgHelp);

    }

  });



  allerts.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Server.count = 0;

      SharedPreferences prefs = getSharedPreferences("MY_DATA", MODE_PRIVATE);

      SharedPreferences.Editor editor = prefs.edit();

      editor.clear();

      editor.apply();

      msg.setVisibility(View.INVISIBLE);

      Intent pgAlert = new Intent(getApplicationContext(), allert.class);

      startActivity(pgAlert);

    }

  });



}



@Override

protected void onDestroy() {

  super.onDestroy();

  server.onDestroy();

}



public static class ConnectTask extends AsyncTask<String, String, Client> {



  @Override

  protected Client doInBackground(String... message) {





    client = new Client(new Client.OnMessageReceived() {

      @Override



      public void messageReceived(String message) {



        publishProgress(message);



      }

  });

    client.run();



    return null;

  }



  @Override

  protected void onProgressUpdate(String... values) {

    super.onProgressUpdate(values);



      msgServer.setTextColor(Color.parseColor("#00FF00"));

      msgServer.setText("ONLINE");



    Log.d("test","response" + values[0]);

  }

}



static Handler startConnection = new Handler();

static Runnable runnableConnection = new Runnable() {

  @Override

  public void run() {



    new ConnectTask().execute("");

  }

};



static Handler startMessage = new Handler();

static Runnable runnableMessage = new Runnable() {

  @Override

  public void run() {

    final Cursor cursor = myDB.fetchData();

    if (cursor.moveToFirst()) {

      do {

        Client.SERVER_IP = cursor.getString(1);

        trm = cursor.getString(2);

      } while (cursor.moveToNext());

    }

    if (client != null) {

      client.sendMessage(ipp +"#" + trm);

    }

  }

};



static Handler startMessageClose = new Handler();

static Runnable runnableMessageClose = new Runnable() {

  @Override

  public void run() {

    if (client != null) {

      client.sendMessage(trm +"IS OFFLINE");

    }

    }

  };





}public class FinalizingOperationsService extends Service {



@Override

public IBinder onBind(Intent intent) {

  return null;

}



@Override

public int onStartCommand(Intent intent, int flags, int startId) {

  Log.d("FOService","Service Started");

  return START_STICKY;

}



@Override

public void onDestroy() {

  super.onDestroy();

  Log.d("FOService","Service Destroyed");

}



@Override

public void onTaskRemoved(Intent rootIntent) {

  Log.e("FOService","Service Ends");

  MainActivity.startConnection.removeCallbacks(MainActivity.runnableConnection);

  MainActivity.startConnection.postDelayed(MainActivity.runnableConnection,100);



  MainActivity.startMessageClose.removeCallbacks(MainActivity.runnableMessageClose);

  MainActivity.startMessageClose.postDelayed(MainActivity.runnableMessageClose,110);



  stopSelf();

  }

}public class FinalizingOperationsService extends Service {



    @Override

    public IBinder onBind(Intent intent) {

      return null;

    }



    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

      Log.d("FOService","Service Started");

      return START_STICKY;

    }



    @Override

    public void onDestroy() {

      super.onDestroy();

      Log.d("FOService","Service Destroyed");

    }



    @Override

    public void onTaskRemoved(Intent rootIntent) {

      Log.e("FOService","Service Ends");

      // write server updation code here

      // after completing code perform stopself() to stop this service;

    }

  }<service android:name=". FinalizingOperationsService" android:stopWithTask="false"/>

像这样创建一个新服务,

protected void onDestroy() {

  new ConnectTask().execute("");

  if (client != null) {

    client.sendMessage(trm +"OFFLINE");

  }

  if (client != null) {

    client.stopClient();

  }



  super.onDestroy();

  server.onDestroy();

}public class MainActivity extends AppCompatActivity {

Server server;

static Client client;

settings Settings;

public static TextView terminale, indr, msg;

TextView log;

static TextView msgServer;

static String ipp;

static String trm;

static DataBaseHandler myDB;

allert Allert;

SharedPreferences prefs;

String s1 ="GAB Tamagnini SRL ?? 2017 \

" +

   "Via Beniamino Disraeli, 17,\

" +

   "42124 Reggio Emilia \

" +

   "Telefono: 0522 / 38 32 22 \

" +

   "Fax: 0522 / 38 32 72 \

" +

   "Partita IVA, Codice Fiscale \

" +

   "Reg. Impr. di RE 00168780351 \

" +

   "Cap. soc. a?? 50.000,00 i.v. \

" +"" +

   "REA n. RE-107440 \

" +

   "presso C.C.I.A.A. di Reggio Emilia";

ImageButton settings, helps, allerts, home;





@Override

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  Utils.darkenStatusBar(this, R.color.colorAccent);

  server = new Server(this);

  myDB = DataBaseHandler.getInstance(this);



  msg = (TextView) findViewById(R.id.msg);

  log = (TextView) findViewById(R.id.log_avviso);

  settings = (ImageButton) findViewById(R.id.impo);

  helps = (ImageButton) findViewById(R.id.aiut);

  allerts = (ImageButton) findViewById(R.id.msge);

  home = (ImageButton) findViewById(R.id.gab);

  terminale = (TextView) findViewById(R.id.terminal);

  indr = (TextView) findViewById(R.id.indr);

  msgServer = (TextView) findViewById(R.id.serverMSG);



  final Cursor cursor = myDB.fetchData();

  if (cursor.moveToFirst()) {

    do {

      indr.setText(cursor.getString(1));

      terminale.setText(cursor.getString(2));

      Client.SERVER_IP = cursor.getString(1);

      trm = cursor.getString(2);

    } while (cursor.moveToNext());

  }





  startService(new Intent(MainActivity.this,FinalizingOperationsService.class));



  WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);

  ipp = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());



  startConnection.postDelayed(runnableConnection,5000);

  startMessage.postDelayed(runnableMessage,5500);



  cursor.close();

  server.Parti();





  home.setOnClickListener(new View.OnClickListener() {

                int counter = 0;

    @Override

    public void onClick(View view) {

                  counter++;

                  if (counter == 10) {

                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                    builder.setCancelable(true);

                    builder.setMessage(s1);

                    builder.show();

                    counter = 0;

                  }

    }

  });



  settings.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Intent impostazioni = new Intent(getApplicationContext(), settingsLogin.class);

      startActivity(impostazioni);

    }

  });



  helps.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Intent pgHelp = new Intent(getApplicationContext(), help.class);

      startActivity(pgHelp);

    }

  });



  allerts.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Server.count = 0;

      SharedPreferences prefs = getSharedPreferences("MY_DATA", MODE_PRIVATE);

      SharedPreferences.Editor editor = prefs.edit();

      editor.clear();

      editor.apply();

      msg.setVisibility(View.INVISIBLE);

      Intent pgAlert = new Intent(getApplicationContext(), allert.class);

      startActivity(pgAlert);

    }

  });



}



@Override

protected void onDestroy() {

  super.onDestroy();

  server.onDestroy();

}



public static class ConnectTask extends AsyncTask<String, String, Client> {



  @Override

  protected Client doInBackground(String... message) {





    client = new Client(new Client.OnMessageReceived() {

      @Override



      public void messageReceived(String message) {



        publishProgress(message);



      }

  });

    client.run();



    return null;

  }



  @Override

  protected void onProgressUpdate(String... values) {

    super.onProgressUpdate(values);



      msgServer.setTextColor(Color.parseColor("#00FF00"));

      msgServer.setText("ONLINE");



    Log.d("test","response" + values[0]);

  }

}



static Handler startConnection = new Handler();

static Runnable runnableConnection = new Runnable() {

  @Override

  public void run() {



    new ConnectTask().execute("");

  }

};



static Handler startMessage = new Handler();

static Runnable runnableMessage = new Runnable() {

  @Override

  public void run() {

    final Cursor cursor = myDB.fetchData();

    if (cursor.moveToFirst()) {

      do {

        Client.SERVER_IP = cursor.getString(1);

        trm = cursor.getString(2);

      } while (cursor.moveToNext());

    }

    if (client != null) {

      client.sendMessage(ipp +"#" + trm);

    }

  }

};



static Handler startMessageClose = new Handler();

static Runnable runnableMessageClose = new Runnable() {

  @Override

  public void run() {

    if (client != null) {

      client.sendMessage(trm +"IS OFFLINE");

    }

    }

  };





}public class FinalizingOperationsService extends Service {



@Override

public IBinder onBind(Intent intent) {

  return null;

}



@Override

public int onStartCommand(Intent intent, int flags, int startId) {

  Log.d("FOService","Service Started");

  return START_STICKY;

}



@Override

public void onDestroy() {

  super.onDestroy();

  Log.d("FOService","Service Destroyed");

}



@Override

public void onTaskRemoved(Intent rootIntent) {

  Log.e("FOService","Service Ends");

  MainActivity.startConnection.removeCallbacks(MainActivity.runnableConnection);

  MainActivity.startConnection.postDelayed(MainActivity.runnableConnection,100);



  MainActivity.startMessageClose.removeCallbacks(MainActivity.runnableMessageClose);

  MainActivity.startMessageClose.postDelayed(MainActivity.runnableMessageClose,110);



  stopSelf();

  }

}public class FinalizingOperationsService extends Service {



    @Override

    public IBinder onBind(Intent intent) {

      return null;

    }



    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

      Log.d("FOService","Service Started");

      return START_STICKY;

    }



    @Override

    public void onDestroy() {

      super.onDestroy();

      Log.d("FOService","Service Destroyed");

    }



    @Override

    public void onTaskRemoved(Intent rootIntent) {

      Log.e("FOService","Service Ends");

      // write server updation code here

      // after completing code perform stopself() to stop this service;

    }

  }<service android:name=". FinalizingOperationsService" android:stopWithTask="false"/>

并像这样在清单文件中定义此服务,

protected void onDestroy() {

  new ConnectTask().execute("");

  if (client != null) {

    client.sendMessage(trm +"OFFLINE");

  }

  if (client != null) {

    client.stopClient();

  }



  super.onDestroy();

  server.onDestroy();

}public class MainActivity extends AppCompatActivity {

Server server;

static Client client;

settings Settings;

public static TextView terminale, indr, msg;

TextView log;

static TextView msgServer;

static String ipp;

static String trm;

static DataBaseHandler myDB;

allert Allert;

SharedPreferences prefs;

String s1 ="GAB Tamagnini SRL ?? 2017 \

" +

   "Via Beniamino Disraeli, 17,\

" +

   "42124 Reggio Emilia \

" +

   "Telefono: 0522 / 38 32 22 \

" +

   "Fax: 0522 / 38 32 72 \

" +

   "Partita IVA, Codice Fiscale \

" +

   "Reg. Impr. di RE 00168780351 \

" +

   "Cap. soc. a?? 50.000,00 i.v. \

" +"" +

   "REA n. RE-107440 \

" +

   "presso C.C.I.A.A. di Reggio Emilia";

ImageButton settings, helps, allerts, home;





@Override

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  Utils.darkenStatusBar(this, R.color.colorAccent);

  server = new Server(this);

  myDB = DataBaseHandler.getInstance(this);



  msg = (TextView) findViewById(R.id.msg);

  log = (TextView) findViewById(R.id.log_avviso);

  settings = (ImageButton) findViewById(R.id.impo);

  helps = (ImageButton) findViewById(R.id.aiut);

  allerts = (ImageButton) findViewById(R.id.msge);

  home = (ImageButton) findViewById(R.id.gab);

  terminale = (TextView) findViewById(R.id.terminal);

  indr = (TextView) findViewById(R.id.indr);

  msgServer = (TextView) findViewById(R.id.serverMSG);



  final Cursor cursor = myDB.fetchData();

  if (cursor.moveToFirst()) {

    do {

      indr.setText(cursor.getString(1));

      terminale.setText(cursor.getString(2));

      Client.SERVER_IP = cursor.getString(1);

      trm = cursor.getString(2);

    } while (cursor.moveToNext());

  }





  startService(new Intent(MainActivity.this,FinalizingOperationsService.class));



  WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);

  ipp = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());



  startConnection.postDelayed(runnableConnection,5000);

  startMessage.postDelayed(runnableMessage,5500);



  cursor.close();

  server.Parti();





  home.setOnClickListener(new View.OnClickListener() {

                int counter = 0;

    @Override

    public void onClick(View view) {

                  counter++;

                  if (counter == 10) {

                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                    builder.setCancelable(true);

                    builder.setMessage(s1);

                    builder.show();

                    counter = 0;

                  }

    }

  });



  settings.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Intent impostazioni = new Intent(getApplicationContext(), settingsLogin.class);

      startActivity(impostazioni);

    }

  });



  helps.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Intent pgHelp = new Intent(getApplicationContext(), help.class);

      startActivity(pgHelp);

    }

  });



  allerts.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

      Server.count = 0;

      SharedPreferences prefs = getSharedPreferences("MY_DATA", MODE_PRIVATE);

      SharedPreferences.Editor editor = prefs.edit();

      editor.clear();

      editor.apply();

      msg.setVisibility(View.INVISIBLE);

      Intent pgAlert = new Intent(getApplicationContext(), allert.class);

      startActivity(pgAlert);

    }

  });



}



@Override

protected void onDestroy() {

  super.onDestroy();

  server.onDestroy();

}



public static class ConnectTask extends AsyncTask<String, String, Client> {



  @Override

  protected Client doInBackground(String... message) {





    client = new Client(new Client.OnMessageReceived() {

      @Override



      public void messageReceived(String message) {



        publishProgress(message);



      }

  });

    client.run();



    return null;

  }



  @Override

  protected void onProgressUpdate(String... values) {

    super.onProgressUpdate(values);



      msgServer.setTextColor(Color.parseColor("#00FF00"));

      msgServer.setText("ONLINE");



    Log.d("test","response" + values[0]);

  }

}



static Handler startConnection = new Handler();

static Runnable runnableConnection = new Runnable() {

  @Override

  public void run() {



    new ConnectTask().execute("");

  }

};



static Handler startMessage = new Handler();

static Runnable runnableMessage = new Runnable() {

  @Override

  public void run() {

    final Cursor cursor = myDB.fetchData();

    if (cursor.moveToFirst()) {

      do {

        Client.SERVER_IP = cursor.getString(1);

        trm = cursor.getString(2);

      } while (cursor.moveToNext());

    }

    if (client != null) {

      client.sendMessage(ipp +"#" + trm);

    }

  }

};



static Handler startMessageClose = new Handler();

static Runnable runnableMessageClose = new Runnable() {

  @Override

  public void run() {

    if (client != null) {

      client.sendMessage(trm +"IS OFFLINE");

    }

    }

  };





}public class FinalizingOperationsService extends Service {



@Override

public IBinder onBind(Intent intent) {

  return null;

}



@Override

public int onStartCommand(Intent intent, int flags, int startId) {

  Log.d("FOService","Service Started");

  return START_STICKY;

}



@Override

public void onDestroy() {

  super.onDestroy();

  Log.d("FOService","Service Destroyed");

}



@Override

public void onTaskRemoved(Intent rootIntent) {

  Log.e("FOService","Service Ends");

  MainActivity.startConnection.removeCallbacks(MainActivity.runnableConnection);

  MainActivity.startConnection.postDelayed(MainActivity.runnableConnection,100);



  MainActivity.startMessageClose.removeCallbacks(MainActivity.runnableMessageClose);

  MainActivity.startMessageClose.postDelayed(MainActivity.runnableMessageClose,110);



  stopSelf();

  }

}public class FinalizingOperationsService extends Service {



    @Override

    public IBinder onBind(Intent intent) {

      return null;

    }



    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

      Log.d("FOService","Service Started");

      return START_STICKY;

    }



    @Override

    public void onDestroy() {

      super.onDestroy();

      Log.d("FOService","Service Destroyed");

    }



    @Override

    public void onTaskRemoved(Intent rootIntent) {

      Log.e("FOService","Service Ends");

      // write server updation code here

      // after completing code perform stopself() to stop this service;

    }

  }<service android:name=". FinalizingOperationsService" android:stopWithTask="false"/>

最后在你的主要活动的 onCreate 方法中启动服务

startService(newIntent(getContext(),FinalizingOperationsService.class));

解释:

当应用程序被杀死或销毁时,服务的 onTaskRemoved() 方法被调用,因此在此方法中您可以执行最终操作以通知服务器并在操作完成后停止您的服务。希望对你有帮助。


相关推荐

  • Spring部署设置openshift

    Springdeploymentsettingsopenshift我有一个问题让我抓狂了三天。我根据OpenShift帐户上的教程部署了spring-eap6-quickstart代码。我已配置调试选项,并且已将Eclipse工作区与OpehShift服务器同步-服务器上的一切工作正常,但在Eclipse中出现无法消除的错误。我有这个错误:cvc-complex-type.2.4.a:Invali…
    2025-04-161
  • 检查Java中正则表达式中模式的第n次出现

    CheckfornthoccurrenceofpatterninregularexpressioninJava本问题已经有最佳答案,请猛点这里访问。我想使用Java正则表达式检查输入字符串中特定模式的第n次出现。你能建议怎么做吗?这应该可以工作:MatchResultfindNthOccurance(intn,Patternp,CharSequencesrc){Matcherm=p.matcher…
    2025-04-161
  • 如何让 JTable 停留在已编辑的单元格上

    HowtohaveJTablestayingontheeditedcell如果有人编辑JTable的单元格内容并按Enter,则内容会被修改并且表格选择会移动到下一行。是否可以禁止JTable在单元格编辑后转到下一行?原因是我的程序使用ListSelectionListener在单元格选择上同步了其他一些小部件,并且我不想在编辑当前单元格后选择下一行。Enter的默认绑定是名为selectNext…
    2025-04-161
  • Weblogic 12c 部署

    Weblogic12cdeploy我正在尝试将我的应用程序从Tomcat迁移到Weblogic12.2.1.3.0。我能够毫无错误地部署应用程序,但我遇到了与持久性提供程序相关的运行时错误。这是堆栈跟踪:javax.validation.ValidationException:CalltoTraversableResolver.isReachable()threwanexceptionatorg.…
    2025-04-161
  • Resteasy Content-Type 默认值

    ResteasyContent-Typedefaults我正在使用Resteasy编写一个可以返回JSON和XML的应用程序,但可以选择默认为XML。这是我的方法:@GET@Path("/content")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})publicStringcontentListRequestXm…
    2025-04-161
  • 代码不会停止运行,在 Java 中

    thecodedoesn'tstoprunning,inJava我正在用Java解决项目Euler中的问题10,即"Thesumoftheprimesbelow10is2+3+5+7=17.Findthesumofalltheprimesbelowtwomillion."我的代码是packageprojecteuler_1;importjava.math.BigInteger;importjava…
    2025-04-161
  • Out of memory java heap space

    Outofmemoryjavaheapspace我正在尝试将大量文件从服务器发送到多个客户端。当我尝试发送大小为700mb的文件时,它显示了"OutOfMemoryjavaheapspace"错误。我正在使用Netbeans7.1.2版本。我还在属性中尝试了VMoption。但仍然发生同样的错误。我认为阅读整个文件存在一些问题。下面的代码最多可用于300mb。请给我一些建议。提前致谢publicc…
    2025-04-161
  • Log4j 记录到共享日志文件

    Log4jLoggingtoaSharedLogFile有没有办法将log4j日志记录事件写入也被其他应用程序写入的日志文件。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化?Log4j有一个SocketAppender,它将向服务发送事件,您可以自己实现或使用与Log4j捆绑的简单实现。它还支持syslogd和Windows事件日志,这对于尝试将日志输出与来自非Java应用程序…
    2025-04-161