Android在c层快速发送广播

  • Post author:
  • Post category:其他


广播是我们常用的一种通信方式。但是广播是java层方法,在c层不能直接调用。如果需要通过在c层触发广播的发送,怎么去实现呢。

1、通过shell命令发送广播。

这种方式最简单,但是shell命名执行时间略长,一般需要500ms以上的时间。发送广播较慢。

system(“am boradcast -a xxxx”);

2、在c层创建一个文件,在framework层的PhoneWindowManager.java中增加一个FileObersver监听文件状态,在OnEvent方法中发出广播。这种方式实时性较高。(记得一定要检查文件的权限是否足够)。

c层的代码

File *file = NULL;
char str[4] = {0};
sprintf(str, "%d",1)
file = fopen("/data/test","w");
if (file != NULL)
{
    fwrite(file,sizeof(str),1,file);
    fclose(file);
}

java层代码

//framework/base/service/cor/java/com/android/server/policy/PhoneWindowManager.java
private class testFileObserver extends FileObserver {
    private testFileObserver(String path) {
        super(path,FileObserver.OPEN); //这里只监听OPEN方法
    }
    
    @Override
    public void onEvent(int event, String path) {
        final int action  = event & FileObserver.ALL_EVENTS;
        switch (action) {
            case FileObserver.OPEN:                
                Intent int = new Intent("com.android.action.TEST");
                mContext.sendBoradcast(intent);
            break;
            default:
                break;
        }
    }
}
 
// 在init方法中启动文件监听
@Override
public void init(Context context, IWindowManager windowManager, WindwMangagerFuncs windowManagerFuncs){
    
    // 省略此处代码
    .........
    testFileObserver testFile = new testFileObserver("/data/test");
    testFile.startWatching();
    .........
}

测试使用第一种方法,延时较高,接近800ms。换成第二方法之后直接降为ms级,1ms就发出了广播。


————————————————

版权声明:本文为CSDN博主「一块冬瓜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Tony_YY/article/details/89688438