私は次のようなシナリオを持っています: 私はチャットクライアントのように動作するアプリケーションを書いています。開始時にサーバーに接続し、メッセージをリスンします(ネットワークのものはサービスによって処理されます)。 私の問題はサインオフしてから数秒後です(関連するメソッドがサーバーに信号を送り、サービスを停止してfinish()を呼び出す)、アプリケーションは何もせずにサインオンしたように見えます(これはサーバーで見ることができます)ログ)。私はこの問題をどのように処理するのか分かりません。つまり、私のアプリがバックグラウンドで再びサインオンすることを妨げることです。 サインオンメソッドは、メインアクティビティのonCreateメソッドで作成されたサービスによって呼び出されます。私はまだアンドロイドに精通していないし、誰かが私にヒントを与えることができることを願っています。 ありがとうございます。そこに、 と私は「XXXXミリ秒で墜落したサービスのスケジューリングの再起動」 initNetwork方法とタイマークラスのようなメッセージが短縮され得るlogcatで認識:コードのアクティビティがバックグラウンドで何かをするのを防ぐ
よろしく、 sMau
編集追加自動サービスの再起動のために自動的に実行されたくない非常に多くのネットワークのものです。
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;
}
}
サービスを開始するすべてのブロードキャスト受信者を使用しましたか? – Elad92
あなたの活動からコードを投稿してサービスする場合、私たちはあなたを助けることができる可能性が非常に高いです。 – FoamyGuy
私の投稿を編集して重要なコード部分を追加しましたが、 – sMau