Почему именно Ява?яз..UnsupportedOperationException когда поток остановится?


Мои коды ниже:

 public class SimpleService extends Service {
    private MyThread myythread;
    public boolean isRunning = false;
    long interval=30000;
    @Override
    public IBinder onBind(Intent arg0) {
    return null;
    }
    @Override
    public void onCreate() {
    super.onCreate();
    myythread  = new MyThread(interval);
    }
    @Override
    public synchronized void onDestroy() {
    super.onDestroy();
    if(!isRunning){
    myythread.interrupt();
    myythread.stop();
    }
    }
    @Override
    public synchronized void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    if(!isRunning){
    myythread.start();
    isRunning = true;
    }
    }
    class MyThread extends Thread{
    long interval;
    public MyThread(long interval){
    this.interval=interval;
    }
    @Override
    public void run(){
    while(isRunning){
    System.out.println("Service running");
    try {
    fileUpload();
    Thread.sleep(interval);
    } catch (InterruptedException e) {
    isRunning = false;
    e.printStackTrace();
    }
    }
    }
    private void fileUpload() {
    String url=Environment.getExternalStorageDirectory()+"/new_Account.txt";
    if(checkInternetConnection()){
    boolean upload_status=new UploadToFtp().ftpUpload1(url, "new_Account.txt");
    }
    }
    }
    private boolean checkInternetConnection() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
    return true;
    }
    else
    {
    return false;
    }
    }
    }

Когда вызов

@Override
    public synchronized void onDestroy() {
    super.onDestroy();
    if(!isRunning){
    myythread.interrupt();
    myythread.stop();
    }
    }

Затем выбросить исключение:

java.lang.UnsupportedOperationException

Как решить это исключение. пожалуйста, помогите мне кто-нибудь.

4   2   2014-05-19 10:58:51

4 ответа:

Вы можете перейти по ссылке ниже

Пожалуйста, обратитесь к моему решению по адресу: Почему java.яз..UnsupportedOperationException когда поток останавливается?

Решение использования TimerTask вместо потока может улучшить и оптимизировать сервер вашей цели.

Даже отмена будет работать :)

P. S: он также имеет информацию, почему stop не работает для вас.

[Ссылка :] [неподдерживаемое исключение операции в потоке]2

Thread.stop() является устаревшим. Не используйте этот метод. Это то, что бросает UnsupportedOperationException.

Смотрите здесь: http://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html

По состоянию на JDK8, поток.стоп действительно исчез. Это первый устаревший метод, который фактически был де-реализован. Теперь он просто выбрасывает UnsupportedOperationException

Http://cs.oswego.edu/pipermail/concurrency-interest/2013-December/012028.html http://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html

Я думаю, что Вы тоже ошиблись в своем коде,вы должны остановить поток, если он работает.

@Override
public synchronized void onDestroy() {
super.onDestroy();
if(isRunning){
myythread.interrupt();
myythread.stop();
}
}