小编Raq*_*qua的帖子

如何在 Android 上解释 /proc/meminfo 的值?

我正在编写一个需要测量当前可用/已用 RAM 的 Android 应用程序。

搜索此站点显示多个主题相似的主题,通常建议两种方法:


方法一:

MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableMegs = mi.availMem / 1048576L;
totalMegs = mi.totalMem / 1048576L;  //available since API 16 only
Run Code Online (Sandbox Code Playgroud)

方法二:解析/proc/meminfo。

我已经尝试了这两种方法,它们似乎工作正常。我从两种方法中得到相同的值。我的问题是,当我转到Settings -> Apps -> Running屏幕底部时,是有关可用/已用 RAM 的信息,这与我使用上述方法获得的信息不同。我怀疑 Google 确实将缓存的应用程序报告为可用内存,因为当我杀死一些缓存进程时,Google 报告的 RAM 使用量几乎没有变化,但我的应用程序的数量接近我刚刚杀死的正在运行的进程的大小。

例子:

方法 1 输出:

meminfo: avail: 660, total: 821, used: 161
Run Code Online (Sandbox Code Playgroud)

方法2输出:

root@android:/proc # cat meminfo
MemTotal:         840868 kB
MemFree:          548080 kB
Buffers:               0 kB
Cached:           128300 kB
SwapCached:            0 kB
Active: …
Run Code Online (Sandbox Code Playgroud)

android

5
推荐指数
2
解决办法
6005
查看次数

我可以在PostgreSQL中的异常中使用参数化SQLSTATE

我倾向于以一种我总是有默认异常处理程序的方式编写PostgreSQL函数,它将函数名称添加到抛出的异常中并再次重新抛出它.

例:

BEGIN
    RAISE exception SQLSTATE '77777' using message = 'Test exception';
EXCEPTION
    WHEN others THEN
        raise exception 
        using message = 'error_handling_test: ' || sqlstate
        || '/' || sqlerrm;
END;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,SQLSTATE 77777不会进一步传播,稍后我捕获的异常具有默认的SQLSTATE P0001.

也可以将SQLSTATE添加到异常处理程序引发,但这似乎仅限于硬编码字符串.我想得到的是这样的:

DECLARE
    err_code varchar;
BEGIN
    RAISE exception SQLSTATE '77777' using message = 'Test exception';
EXCEPTION
    WHEN others THEN

        err_code:=sqlstate;

        raise exception sqlstate err_code
        using message = 'error_handling_test: ' || sqlstate
        || '/' || sqlerrm;
END;
Run Code Online (Sandbox Code Playgroud)

这不会编译.

database postgresql exception-handling plpgsql

4
推荐指数
1
解决办法
4125
查看次数