0

現在、ボタンを押すとサービスが開始され、サービス内にスレッドが作成されるアプリがあります。次に、サービスをシャットダウンしてスレッドを強制終了する2番目のボタン(最初に押されたときに表示される)があります。以下は現在のコードですが、サービスは停止しているように見えますが、スレッドは続行します。

public class MainActivity extends Activity {
    private static  Button              lock            = null;
    private static  Button              unlock          = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lock = (Button) this.findViewById(R.id.lock);
        unlock = (Button) this.findViewById(R.id.unlock);


        lock.setOnClickListener(btn_lock);
        unlock.setOnClickListener(btn_unlock);

        unlock.setVisibility(View.VISIBLE);
        lock.setVisibility(View.GONE);
        text.setVisibility(View.GONE);


        startService(new Intent(this, MainService.class));
    }


    private OnClickListener btn_lock = new OnClickListener() {
        public void onClick(View v) {
                unlock.setVisibility(View.VISIBLE);
                lock.setVisibility(View.GONE);

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

        }
    };

    private OnClickListener btn_unlock = new OnClickListener() {
        public void onClick(View v) {
                unlock.setVisibility(View.GONE);
                lock.setVisibility(View.VISIBLE);
                stopService(new Intent(MainActivity.this, MainService.class));
        }
    };


}

そして、私のサービスクラスは次のようになります。

public class MainService extends Service {

    Thread 1Thread;

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

    @Override
    public void onCreate() {
        1Thread = new Thread() {
            public void run() {
                    while(true){
                        try {
                            Thread.sleep(180000); // 3 minutes
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        Log.i("TEST", "Thread is still here!");
                }
            }
        };


    }

    @Override
    public void onDestroy() {
        1Thread.interrupt();
    }

    @Override
    public void onStart(Intent intent, int startId) {

        1Thread.start();
    }

}

誰かが助けてくれることを願っています。さらに情報が必要な場合はお知らせください。

4

2 に答える 2