【发布时间】:2012-05-26 14:34:42
【问题描述】:
我的应用程序经常崩溃,我的日志会显示:
@@@ ABORTING: INVALID HEAP ADDRESS IN dlfree
Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)
有时code=2,但总是Fatal signal 11 和invalid heap address。
我已经尝试研究这意味着什么以及如何解决它。 This thread has been the most helpful;但是,我仍然没有解决方案。
当我运行几个AsyncTasks 下载多个图像时发生错误。
这是我的主要AsyncTask
public class FetchArtistImages extends AsyncTask<Void, Integer, String[]> implements Constants {
private final WeakReference<Context> contextReference;
public FetchArtistImages(Context context) {
contextReference = new WeakReference<Context>(context);
}
@Override
protected String[] doInBackground(Void... params) {
String[] projection = new String[] {
Audio.Artists._ID, Audio.Artists.ARTIST
};
String sortOrder = Audio.Artists.DEFAULT_SORT_ORDER;
Uri uri = Audio.Artists.EXTERNAL_CONTENT_URI;
Cursor c = contextReference.get().getContentResolver()
.query(uri, projection, null, null, sortOrder);
ArrayList<String> artistIds = new ArrayList<String>();
if (c != null) {
int count = c.getCount();
if (count > 0) {
final int ARTIST_IDX = c.getColumnIndex(Audio.Artists.ARTIST);
for (int i = 0; i < count; i++) {
c.moveToPosition(i);
artistIds.add(c.getString(ARTIST_IDX));
}
}
c.close();
c = null;
}
return artistIds.toArray(new String[artistIds.size()]);
}
@Override
protected void onPostExecute(String[] result) {
for (int i = 0; i < result.length; i++) {
new LastfmGetArtistImages(contextReference.get()).executeOnExecutor(
AsyncTask.THREAD_POOL_EXECUTOR, result[i]);
}
super.onPostExecute(result);
}
尽管我已经尝试研究过这个问题的原因,但我仍然发现自己在修复它时迷失了方向。如果有人有一些见解,我肯定会很高兴看到它。每次我execute 我的AsyncTasks 时都不会抛出该错误,但我找不到太多的模式来帮助找出发生这种情况的原因。 SO上有几个关于fatal signal 11的其他线程,但在我的情况下它们并没有提供太多帮助。
【问题讨论】:
-
您的应用程序中是否有任何 JNI?
-
我的应用程序中确实有 JNI 并且收到此错误。任何建议,@JulieinAustin
-
@WhitneyImura This question 讨论了当 JNI 导致此错误时该怎么做。
标签: android android-asynctask heap-memory