似乎我的活动没有正确完成,因为每次启动和关闭它时我都会获得更大的内存消耗。有人可以建议我一个想法吗?这是代码:
declare
v_qry varchar2(4000) := '';
v_res number;
begin
for x in (
select table_name, column_name, data_type, data_length
from user_tab_columns
where data_type in ('VARCHAR2', 'CHAR', 'NVARCHAR2')
order by data_type
) loop
-- prepare your statement
v_qry := 'select MAX(LENGTH('||x.column_name||')) FROM '||x.table_name||' ';
-- execute
execute immediate v_qry into v_res;
-- print result
dbms_output.put_line('in:'||x.table_name||'.' ||x.column_name||':'||v_res||':compared to:'|| x.data_length);
end loop;
end;
/
答案 0 :(得分:0)
Android Studio首先有一个built in support in finding a memory leak。另一种选择是使用Leak Canary。现在,在您的代码中,我看到:mLocationManager
。我怀疑这会导致泄漏。您可以使用我之前提到的方法对其进行验证。当你对它进行限定时,不要传递活动上下文 - 使用mActivity.getApplicationContext()
。
答案 1 :(得分:0)
您的ProgressDialog永远不会被取消的条件很少,例如
while (mLastLocation == null)
{
if(SystemClock.currentThreadTimeMillis() - startTime >= 5000){
mLastLocation = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
if(SystemClock.currentThreadTimeMillis() - time >= 1000) {
if (ActivityCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mLocationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mLocationListener, null);
time = SystemClock.currentThreadTimeMillis();
}
}
您的线程永远不会完成,但它会保留您的活动的参考(例如在ProgressDialog中)。我建议你重构你的代码。例如,您可以在onStop()方法中取消()ProgressDialog。