0

現在、サービスルーチンを作成し始めており、何も変更せずにコードを再実行するたびにエラーメッセージが表示されます。

サービスルーチンは次のとおりです。

パブリッククラスPollingServiceはServiceを拡張します{

private static final String TAG = PollingService.class.getSimpleName();

private Polling updater;

public boolean isRunning = false;

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    updater = new Polling();
    Log.d(TAG, "On Create'd");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // Start the Polling updater
    if(!this.isRunning){
        updater.start();
        this.isRunning = true;
    }
    Log.d(TAG, "On Start'd");
    return super.onStartCommand(intent, flags, startId);
}

@Override
public synchronized void onDestroy() {
    super.onDestroy();
    // Stop the Polling updater
    if(this.isRunning){
        updater.interrupt();
    }
    Log.d(TAG, "On Destroy'd");
}

// Polling Thread
class Polling extends Thread {
    static final long DELAY = 3000;

    @Override
    public void run() {
        while (isRunning) {
            try {
                // Do something
                Log.d(TAG, "Polling run'ing");
                // Sleep
                Thread.sleep(DELAY);
            } catch (InterruptedException e) {
                // Interrupted
                isRunning = false;
            }
        }
    }

}

}

LogCatの「OnCreate'd」と「OnStart'd」、および「Polling run'ing」に表示されるアプリを実行すると、プログラムを再実行して、「OnStart'd」のみが表示されるかどうかを確認します。 LogCatで。しかし、代わりにこのエラーが発生します:

ActivityManager:開始:インテント{act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] cmp = com.project.keegan / .StartApp} ActivityManager:警告:アクティビティは開始されていません。現在のタスクは開始されています。前面に持ってきた

また、LogCatを確認すると、「ポーリング実行中」と表示されます。そこで、エミュレーターに移動しました:メニュー->アプリマネージャー->そしてサービスを停止しました。

プログラムを再実行すると、同じ2つのエラーが発生し、アプリは起動しましたが、サービスは起動しませんでした。しかし、ここで面白い部分があります。コードに変更を加えて(スペースバーを押してからバックスペースを押すなど)、[保存]をクリックしてプログラムを再実行すると、サービスが再度実行されます。

これが私がそれを呼んでいるクラスです:

パブリッククラスStartAppはActivityを拡張し、View.OnClickListener{を実装します。

TextView disp_hello;
Button but_go2send, but_go2request;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.start_app);
    Vars();
    startService(new Intent(this, PollingService.class));
    but_go2send.setOnClickListener(this);
    but_go2request.setOnClickListener(this);
}

。。。}

4

1 に答える 1

0

あなたの問題はあなたのコードとは何の関係もありません。Eclipseは、コードを変更していないことを検出するのに十分スマートであり、デバイス上のアプリの置き換えをスキップします。

そして、アプリを再起動する代わりに(アプリを強制終了する必要があります)、アプリを前面に戻すだけです。

再起動する場合は、アプリを存在/強制終了するか、同じようにしてスペースを挿入する必要があります。

于 2013-03-25T18:35:38.253 に答える