안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
주소록을 가져와서 출력하는 소스를 작성중인데
가져온 리스트를 스크롤하다보면 오류가 발생합니다.
11-09 18:07:43.638: ERROR/IMemory(1525): cannot dup fd=1023, size=1048576, err=0 (Too many open files)
11-09 18:07:43.638: ERROR/IMemory(1525): cannot map BpMemoryHeap (binder=0x6e5300), size=1048576, fd=-1 (Bad file number)
11-09 18:07:43.638: ERROR/JavaBinder(1525): *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
11-09 18:07:43.638: ERROR/JavaBinder(1525): java.lang.RuntimeException: No memory in memObj
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.database.CursorWindow.native_init(Native Method)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.database.CursorWindow.<init>(CursorWindow.java:518)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.database.CursorWindow.<init>(CursorWindow.java:27)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:493)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:496)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:96)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.os.Binder.execTransact(Binder.java:287)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at dalvik.system.NativeStart.run(Native Method)
11-09 18:07:43.669: ERROR/IMemory(1525): cannot dup fd=1023, size=1048576, err=0 (Too many open files)
11-09 18:07:43.669: ERROR/IMemory(1525): cannot map BpMemoryHeap (binder=0x433400), size=1048576, fd=-1 (Bad file number)
11-09 18:07:43.677: ERROR/JavaBinder(1525): *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
11-09 18:07:43.677: ERROR/JavaBinder(1525): java.lang.RuntimeException: No memory in memObj
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.database.CursorWindow.native_init(Native Method)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.database.CursorWindow.<init>(CursorWindow.java:518)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.database.CursorWindow.<init>(CursorWindow.java:27)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:493)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:496)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:96)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.os.Binder.execTransact(Binder.java:287)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at dalvik.system.NativeStart.run(Native Method)
11-09 18:07:43.677: DEBUG/AndroidRuntime(4096): Shutting down VM
11-09 18:07:43.685: WARN/dalvikvm(4096): threadid=3: thread exiting with uncaught exception (group=0x4001d1c8)
11-09 18:07:43.685: ERROR/AndroidRuntime(4096): Uncaught handler: thread main exiting due to uncaught exception
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): java.lang.NullPointerException
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at kr.pe.johnkim.contactmanager.adapter.ContactManagerAdapter.getView(ContactManagerAdapter.java:85)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.AbsListView.obtainView(AbsListView.java:1266)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.ListView.makeAndAddView(ListView.java:1668)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.ListView.fillUp(ListView.java:667)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.ListView.fillGap(ListView.java:613)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2566)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2368)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.os.Handler.handleCallback(Handler.java:587)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.os.Handler.dispatchMessage(Handler.java:92)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.os.Looper.loop(Looper.java:123)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.app.ActivityThread.main(ActivityThread.java:4364)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at java.lang.reflect.Method.invokeNative(Native Method)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at java.lang.reflect.Method.invoke(Method.java:521)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at dalvik.system.NativeStart.main(Native Method)
이런식으로 나오는데 메모리쪽이 어쩌고 저쩌고 나오고 cursor 에서 null 오류가 발생하네요.
처음엔 출력 잘되는데 스크롤을 한참 하다보면 발생합니다.
소스는 아래와 같습니다.
(위에서 nullpoint exception 이 발생한 85 라인이 아래소스의 33 라인입니다.)
별다른건 없습니다.
getView 에서 출력하고 있는데요, 왜 저런 오류가 발생하는지 모르겠네요.
메모리쪽 문제인지도.. 현재 모토로이, 갤럭시S 두대로 테스트 중인데 같은 현상이 발생하고 있습니다.
혹시나 해서 view wrapper 로 구현해봤는데도 마찬가지입니다. 성능 향상 효과도 거의 없는것 같고..
지금도 속도가 너무 느립니다. 로직이 잘못됐는지..
아시는분의 조언을 부탁드립니다.
주소록을 가져와서 출력하는 소스를 작성중인데
가져온 리스트를 스크롤하다보면 오류가 발생합니다.
11-09 18:07:43.638: ERROR/IMemory(1525): cannot dup fd=1023, size=1048576, err=0 (Too many open files)
11-09 18:07:43.638: ERROR/IMemory(1525): cannot map BpMemoryHeap (binder=0x6e5300), size=1048576, fd=-1 (Bad file number)
11-09 18:07:43.638: ERROR/JavaBinder(1525): *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
11-09 18:07:43.638: ERROR/JavaBinder(1525): java.lang.RuntimeException: No memory in memObj
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.database.CursorWindow.native_init(Native Method)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.database.CursorWindow.<init>(CursorWindow.java:518)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.database.CursorWindow.<init>(CursorWindow.java:27)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:493)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:496)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:96)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at android.os.Binder.execTransact(Binder.java:287)
11-09 18:07:43.638: ERROR/JavaBinder(1525): at dalvik.system.NativeStart.run(Native Method)
11-09 18:07:43.669: ERROR/IMemory(1525): cannot dup fd=1023, size=1048576, err=0 (Too many open files)
11-09 18:07:43.669: ERROR/IMemory(1525): cannot map BpMemoryHeap (binder=0x433400), size=1048576, fd=-1 (Bad file number)
11-09 18:07:43.677: ERROR/JavaBinder(1525): *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
11-09 18:07:43.677: ERROR/JavaBinder(1525): java.lang.RuntimeException: No memory in memObj
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.database.CursorWindow.native_init(Native Method)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.database.CursorWindow.<init>(CursorWindow.java:518)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.database.CursorWindow.<init>(CursorWindow.java:27)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:493)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:496)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:96)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at android.os.Binder.execTransact(Binder.java:287)
11-09 18:07:43.677: ERROR/JavaBinder(1525): at dalvik.system.NativeStart.run(Native Method)
11-09 18:07:43.677: DEBUG/AndroidRuntime(4096): Shutting down VM
11-09 18:07:43.685: WARN/dalvikvm(4096): threadid=3: thread exiting with uncaught exception (group=0x4001d1c8)
11-09 18:07:43.685: ERROR/AndroidRuntime(4096): Uncaught handler: thread main exiting due to uncaught exception
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): java.lang.NullPointerException
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at kr.pe.johnkim.contactmanager.adapter.ContactManagerAdapter.getView(ContactManagerAdapter.java:85)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.AbsListView.obtainView(AbsListView.java:1266)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.ListView.makeAndAddView(ListView.java:1668)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.ListView.fillUp(ListView.java:667)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.ListView.fillGap(ListView.java:613)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2566)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2368)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.os.Handler.handleCallback(Handler.java:587)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.os.Handler.dispatchMessage(Handler.java:92)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.os.Looper.loop(Looper.java:123)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at android.app.ActivityThread.main(ActivityThread.java:4364)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at java.lang.reflect.Method.invokeNative(Native Method)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at java.lang.reflect.Method.invoke(Method.java:521)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-09 18:07:43.763: ERROR/AndroidRuntime(4096): at dalvik.system.NativeStart.main(Native Method)
이런식으로 나오는데 메모리쪽이 어쩌고 저쩌고 나오고 cursor 에서 null 오류가 발생하네요.
처음엔 출력 잘되는데 스크롤을 한참 하다보면 발생합니다.
소스는 아래와 같습니다.
(위에서 nullpoint exception 이 발생한 85 라인이 아래소스의 33 라인입니다.)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
pp = position;
convertView = View.inflate(context, R.layout.contact_entry, null);
TextView name = (TextView)convertView.findViewById(R.id.contactEntryText);
TextView phonenumber = (TextView)convertView.findViewById(R.id.txtViewContactPhoneNumber);
ImageView profileimage = (ImageView)convertView.findViewById(R.id.profileimage);
CheckBox chk = (CheckBox)convertView.findViewById(R.id.CheckBox01);
cursor.moveToPosition(position);
Long id = cursor.getLong(0);
name.setText(cursor.getString(1));
Bitmap bm = BitmapFactory.decodeStream(openPhoto(id));
profileimage.setImageBitmap(bm);
chk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(context, "position : " + pp, Toast.LENGTH_SHORT).show();
// Log.e("count : ", position+"");
}
});
ContentResolver contentResolver = context.getContentResolver();
phoneCursor = contentResolver.query(Phone.CONTENT_URI,
new String[]{Phone.NUMBER},
Phone.CONTACT_ID + "=" + id, null, Phone.IS_SUPER_PRIMARY + " DESC");
if(phoneCursor.getCount() > 0){
// Log.e("count : ", phonecursor.getCount()+"");
phoneCursor.moveToFirst();
Log.e("phone : ", phoneCursor.getString(0));
phonenumber.setText(phoneCursor.getString(0));
}else{
}
return super.getView(position, convertView, parent);
}
별다른건 없습니다.
getView 에서 출력하고 있는데요, 왜 저런 오류가 발생하는지 모르겠네요.
메모리쪽 문제인지도.. 현재 모토로이, 갤럭시S 두대로 테스트 중인데 같은 현상이 발생하고 있습니다.
혹시나 해서 view wrapper 로 구현해봤는데도 마찬가지입니다. 성능 향상 효과도 거의 없는것 같고..
지금도 속도가 너무 느립니다. 로직이 잘못됐는지..
아시는분의 조언을 부탁드립니다.




해당부분에서 bitmap을 만들기위해 heap memory를 할당을 반복하다가 결국 memory full이 난거 같습니다.
그냥 decodeStream()을 쓰면 해당 이미지 크기만큼 heap을 차지하니 가능한 이미지를 축소해서 bitmap을 쓰시는게 문제 해결에 도움이 될것 같네요.