请问大家,可以在新建的线程中访问android的framebuffer不?我尝试在android项目中用timer的schedule来执行framebuffer信息的读取。但是定时器里的任务好像执行是另外开的线程,因此程序总是崩掉(我不清楚是不是这个原因)。因此,请教操作过android或者linuxframebuffer的大神们,可以跨线程读取framebuffer的数据吗?谢谢

解决方案 »

  1.   

    访问framebuffer和新建线程有什么关系?
    framebuffer说白了就是一片内存,什么访问不行? 
      

  2.   

    可是我用timer去定时循环的执行读取framebuffer,程序总是崩掉。同样的代码,我在主线程中用while循环去读取,就可以成功。这是怎么回事呢?
      

  3.   

    我新建了一个线程来执行读取framebuffer的操作,确实不行,直接就崩掉了
      

  4.   

    读取framebuffer估计需要system级别的权限,这个要改framework,把你当前的应用的uid加进去
      

  5.   

    具体可以看一下Phone应用是怎么做的,Phone就是个特殊应用
      

  6.   

    或者可以把程序崩溃的log贴出来大家看看什么原因
      

  7.   

    的确要设置:你看看这http://wenku.baidu.com/view/11223e8683d049649b665832.html?from=related&hasrec=1
      

  8.   

    framebuffer的操作我已经实现了。关键是是否可以用新开启的一个线程去操作呢?我的手机是有root权限了,应用程序也申请了root的。
      

  9.   

    android,新建线程访问framebuffer。有人知道这个可以实现不?我想新建一个service来循环读取framebuffer的数据并通过socket发送出去。但是总是失败。如果不新建线程就可以读出成功。请知道的人指点一下
      

  10.   

    代码有点多。基本原理就是我用c写了好了一个读取framebuffer数据的.so库文件。然后在java中调用,是新建的一个线程,程序就死掉。没有错误,logcat里面有不断的数据交互,直到程序崩掉。
      

  11.   

    可以在c中加些log,把init.rc的loglevel改到8,还是要看下错误信息或源码,不然大家没法帮你呀,只能瞎猜。可以只贴一小部分源码就行
      

  12.   

    jintArray Java_com_liuqiang_SendPicThread_ScreenShot( JNIEnv* env,jobject thiz )
    {
      _fb = get_framebuffer();
      if (_fb <= 0)
      {
      return NULL;
      }
      else
      {
          int w = vi.xres, h = vi.yres, depth = vi.bits_per_pixel; //每一象素的bit数
         long int _ScreenSize=w*h*depth/8;
         long int _size=_ScreenSize/4;
         jintArray test;
         int a[_size];
         memcpy(a,_start2,_ScreenSize);
         test=(*env)->NewIntArray(env,_size);
       //  memcpy(test,_start2,_ScreenSize);
       (*env)->SetIntArrayRegion(env, test, 0, _size, a);
          munmap(_start2, _ScreenSize);
         close(_fb);
         return test;
      }
    上面是我的c代码,返回framebuffer的数据,编译成.so库文件。然后在java中新建一个线程,引用这个函数,得到数据,程序会死掉,查看logcat,有不断的message数据滚动,直到程序崩掉。如果是在UI主线程中去调用上面的库,则可以成功
      

  13.   

    对啊,我也一直觉得,既然framebuffer都映射到内存中了,相当于是新建一个线程去读这段内存,应该不会有问题的。但是结果很明显的,主线程中去读(循环读也行)都不会有问题,但是界面卡死,新建一个线程去读,程序就会崩掉,只读一次也会崩掉,logcat中,message一栏,有不断的数据交互,直到程序死掉(可能是内存溢出)。我新建一个service来完成这个操作,结果一样,还是需要新建线程,否则service也没法返回,界面会提示程序没有响应,终止还是继续。困扰了好久,请指点,谢谢
      

  14.   

    难道是多线程同时操作fb的缘故?有点没搞清楚驱动的锁允许同一进程的多个线程同时操作fb吗
      

  15.   

    是我开关framebuffer太频繁的问题。已解决
      

  16.   

    你是怎么解决的,我的手机有root权限,也不能打开framebuffer设备,请问有什么办法实现没,能不能给具体的代码看一下。