हैंडलर संदर्भ लीक चूंकि इस हैंडलर को आंतरिक कक्षा के रूप में घोषित किया जाता है, यह बाहरी वर्ग को कचरा इकट्ठा करने से रोक सकता है। यदि हैंडलर मुख्य धागे के अलावा किसी थ्रेड के लिए लूपर या संदेश क्यूई का उपयोग कर रहा है, तो कोई समस्या नहीं है। यदि हैंडलर मुख्य धागे के लूपर या संदेश क्यूई का उपयोग कर रहा है, तो आपको अपने हैंडलर घोषणा को ठीक करने की आवश्यकता है, निम्नानुसार: हैंडलर को स्थैतिक वर्ग के रूप में घोषित करें; बाहरी कक्षा में, बाहरी कक्षा में वीक रेफरेंस को तुरंत चालू करें और जब आप हैंडलर को तुरंत चालू करते हैं तो इस ऑब्जेक्ट को अपने हैंडलर पर पास करें; WeakReference ऑब्जेक्ट का उपयोग कर बाहरी वर्ग के सदस्यों के सभी संदर्भ बनाएं।यह हैंडलर वर्ग स्थिर होना चाहिए या लीक हो सकता है: AsyncQueryHandler
मुझे एक समाधान की आवश्यकता है !!!!!
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});
}
}
}
मेरी चेतावनी AsyncQueryHandler –
यह भी AsyncQueryHandler –
@shriduttkothari पर लागू होती है कॉलर क्लास से कमजोर संदर्भ को तुरंत सुरक्षित करना सुरक्षित नहीं है? 'निजी फाइनल माईहैंडलर mHandler = नया MyHandler (नया WeakReference <> (यह)) में बदल रहा है; ' – hannunehg