Diese Handler-Klasse sollte statisch sein, da sonst möglicherweise Undichtigkeiten auftreten: AsyncQueryHandler

Handler-Referenzlecks Da dieser Handler als innere Klasse deklariert ist, kann verhindert werden, dass die äußere Klasse überflüssig wird. Wenn der Handler einen Looper oder MessageQueue für einen anderen Thread als den Hauptthread verwendet, liegt kein Problem vor. Wenn der Handler den Looper oder MessageQueue des Hauptthreads verwendet, müssen Sie die Handler-Deklaration wie folgt korrigieren: Deklarieren Sie den Handler als statische Klasse. Instanziieren Sie in der äußeren Klasse eine WeakReference an die äußere Klasse und übergeben Sie dieses Objekt an Ihren Handler, wenn Sie den Handler instanziieren. Stellen Sie mit dem WeakReference-Objekt alle Verweise auf Mitglieder der äußeren Klasse her.

Ich brauche eine Lösung !!!!!

public class EMG_Activity extends AppCompatActivity {

    // An object that manages Messages in a Thread
    public static Handler HandlerMessager;
    private static AsyncQueryHandler queryHandler;

    private static final String EMG = "EMG";
    private ManageConnectedSocket manageConnectedSocket;
    private Thread manageThread;
    private Button button_start_pause;


    private int id =  0;
    private int xValue = 0;

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

        queryHandler = new AsyncQueryHandler(getContentResolver()) {

            @Override
            protected void onInsertComplete(int token, Object cookie, Uri uri) {
                if(cookie != null)
                    id = (int) ContentUris.parseId(uri);
            }
        };
              ...........

        button_start_pause = (Button) findViewById(R.id.button_start_pause);
        button_start_pause.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {

                ..................

                manageConnectedSocket = new ManageConnectedSocket(MainActivity.bluetoothDevice, MainActivity.samplingFrequency, new int[]{0}, new int[]{1, 0, 1, 1});
                manageThread = new Thread(manageConnectedSocket);
                manageThread.start();

                ContentValues values = getContentValuesExam (EMG, AlsrmSchema.PROGRESS, Utils.getCurrentDate());
                queryHandler.startInsert(1, id, AlsrmContract.Exam.CONTENT_URI, values);

                ......
            }
        });
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        .....

            ContentValues values = getContentValuesExam (EMG, AlsrmSchema.CORRUPTED, Utils.getCurrentDate());
            queryHandler.startUpdate(1, null, AlsrmContract.Exam.CONTENT_URI, values, AlsrmSchema.id + " = ? ", new String[]{"" + id});
        }
    }
}

Antworten auf die Frage(0)

Ihre Antwort auf die Frage