Home > Enterprise >  Bitmap: Error, cannot access an invalid/free'd bitmap here
Bitmap: Error, cannot access an invalid/free'd bitmap here

Time:02-22

I'm getting bitmap from the FrameLayout. In frame layout, one gif is added display and one background image.

But every time I save the video this error comes.

I don't know how it is solved. I'm also try bitmap recycled but still error is not solved.

Bitmap: Error, cannot access an invalid/free'd bitmap here!
A/vdostatus.make: runtime.cc:669] Runtime aborting...
    runtime.cc:669] All threads:
    runtime.cc:669] DALVIK THREADS (46):
    runtime.cc:669] "main" prio=10 tid=1 Runnable
    runtime.cc:669]   | group="" sCount=0 ucsCount=0 flags=0 obj=0x72285258 self=0x72f4e2014010
    runtime.cc:669]   | sysTid=30680 nice=-10 cgrp=top-app sched=0/0 handle=0x72f61713c4f8
    runtime.cc:669]   | state=R schedstat=( 59186976875 22687601168 43639 ) utm=2111 stm=3806 core=0 HZ=100
    runtime.cc:669]   | stack=0x7ffc4e974000-0x7ffc4e976000 stackSize=8188KB
    runtime.cc:669]   | held mutexes= "abort lock" "mutator lock"(shared held)
    runtime.cc:669]   native: #00 pc 000000000073cd7f  /apex/com.android.art/lib64/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool) 127)
    runtime.cc:669]   native: #01 pc 0000000000882570  /apex/com.android.art/lib64/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, bool, BacktraceMap*, bool) const 368)
    runtime.cc:669]   native: #02 pc 00000000008a32fa  /apex/com.android.art/lib64/libart.so (art::DumpCheckpoint::Run(art::Thread*) 1082)
    runtime.cc:669]   native: #03 pc 000000000089c1ac  /apex/com.android.art/lib64/libart.so (art::ThreadList::RunCheckpoint(art::Closure*, art::Closure*) 220)
    runtime.cc:669]   native: #04 pc 000000000089b21d  /apex/com.android.art/lib64/libart.so (art::ThreadList::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, bool) 1213)
    runtime.cc:669]   native: #05 pc 000000000082271f  /apex/com.android.art/lib64/libart.so (art::Runtime::Abort(char const*) 2319)
    runtime.cc:669]   native: #06 pc 00000000000194ac  /apex/com.android.art/lib64/libbase.so (android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_3::__invoke(char const*) 60)
    runtime.cc:669]   native: #07 pc 00000000000075f2  /system/lib64/liblog.so (__android_log_assert 370)
    runtime.cc:669]   native: #08 pc 00000000005ffb76  /system/lib64/libhwui.so (android::bitmap::toBitmap(long) 38)
    runtime.cc:669]   native: #09 pc 00000000005ffcb5  /system/lib64/libhwui.so (android::CanvasJNI::setBitmap(_JNIEnv*, _jobject*, long, long) 69)
    runtime.cc:669]   at android.graphics.Canvas.nSetBitmap(Native method)
    runtime.cc:669]   at android.graphics.Canvas.setBitmap(Canvas.java:182)
    runtime.cc:669]   at android.view.View.buildDrawingCacheImpl(View.java:21876)
    runtime.cc:669]   at android.view.View.buildDrawingCache(View.java:21776)
    runtime.cc:669]   at android.view.View.getDrawingCache(View.java:21612)
    runtime.cc:669]   at android.view.View.draw(View.java:22369)
    runtime.cc:669]   at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
    runtime.cc:669]   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
    runtime.cc:669]   at android.view.View.draw(View.java:22647)
    runtime.cc:669]   at android.view.View.draw(View.java:22517)
    runtime.cc:669]   at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
    runtime.cc:669]   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
    runtime.cc:669]   at android.view.View.draw(View.java:22515)
    runtime.cc:669]   at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
    runtime.cc:669]   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
    runtime.cc:669]   at android.view.View.draw(View.java:22515)
    runtime.cc:669]   at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
    runtime.cc:669]   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
    runtime.cc:669]   at android.view.View.draw(View.java:22515)
    runtime.cc:669]   at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
    runtime.cc:669]   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
    runtime.cc:669]   at android.view.View.draw(View.java:22647)
    runtime.cc:669]   at android.view.View.draw(View.java:22517)
    runtime.cc:669]   at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
    runtime.cc:669]   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)

A/vdostatus.make: runtime.cc:669]   at android.graphics.Bitmap.recycle(Bitmap.java:366)
    runtime.cc:669]   at android.view.View.destroyDrawingCache(View.java:21643)
    runtime.cc:669]   at wa.vdostatus.maker.EditorActivity.getFrameBitmap(EditorActivity.java:3698)
    runtime.cc:669]   at wa.vdostatus.maker.EditorActivity.save(EditorActivity.java:3647)
    runtime.cc:669]   at wa.vdostatus.maker.EditorActivity.access$16900(EditorActivity.java:164)
    runtime.cc:669]   at wa.vdostatus.maker.EditorActivity$saveImage.doInBackground(EditorActivity.java:6186)
    runtime.cc:669]   at android.os.AsyncTask$3.call(AsyncTask.java:394)
    runtime.cc:669]   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    runtime.cc:669]   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
    runtime.cc:669]   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    runtime.cc:669]   at  313)

A/libc: Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 30680 (vdostatus.maker), pid 30680 (vdostatus.maker)

Is my code get a bitmap of FrameLayout.

private Bitmap getFrameBitmap() {
        Bitmap bm = null;
        flEditor.postInvalidate();
        flEditor.setDrawingCacheEnabled(true);
        flEditor.buildDrawingCache();
        bm = Bitmap.createBitmap(flEditor.getDrawingCache());
        flEditor.destroyDrawingCache();
        bm = Utils.TrimBitmap(bm);
        bm = Utils.getResizedBitmap(bm, MyApplication.VIDEO_WIDTH, MyApplication.VIDEO_HEIGHT);
        return bm.copy(bm.getConfig(), false);
}

CodePudding user response:

take a copy of bitmap for create and manipulate.

when destroyDrawingCache(); method will called,at that time generated bitmap will recycle(destroy).

after that we can use copy of that bitmap for future process.

private Bitmap getFrameBitmap() {
        Bitmap bm = null;
        flEditor.postInvalidate();
        flEditor.setDrawingCacheEnabled(true);
        flEditor.buildDrawingCache();
        bm = Bitmap.createBitmap(flEditor.getDrawingCache());
        Bitmap bmc = bm.copy(bm.getConfig(), true); //check with both parameter, true and false
        flEditor.destroyDrawingCache();
        bmc = Utils.TrimBitmap(bmc);
        bmc = Utils.getResizedBitmap(bmc, MyApplication.VIDEO_WIDTH, MyApplication.VIDEO_HEIGHT);
        return bm.copy(bmc.getConfig(), false);
    }
  • Related