我正在编写一个需要测量当前可用/已用 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) 我正在Web服务中实现条件请求.后端可以轻松检索实体的最后修改日期,因此我发送Last-Modified并返回If-Modified-Since.HTTP日期的RFC指定的格式与.NET中的"R"格式说明符相同.
问题是DateTime.ToString("R")正确格式化日期,但传递"R"给ParseExact后面没有读取时区(有一个"往返"说明符"O",但它不是我需要的格式).这是LinqPad中的一个例子:
DateTime lastModified = new DateTime(2015, 10, 01, 00, 00, 00, DateTimeKind.Utc);
string lastModifiedField = lastModified.ToString("R"); // Thu, 01 Oct 2015 00:00:00 GMT
DateTime ifModifiedSince = DateTime.ParseExact(
lastModifiedField, "R", CultureInfo.InvariantCulture);
ifModifiedSince.Kind.Dump(); // Unspecified
Run Code Online (Sandbox Code Playgroud)
我当然可以使用解析的方法DateTime来迫使它进入我想要的格式,但我怎么能得到的框架,使用已经存在的数据?
我有一个带括号的字符串,我希望只提取括号内的字符串部分.
例如,从以下字符串:
"abc(def)ghi"
Run Code Online (Sandbox Code Playgroud)
我想得到"def",没有括号.
我做了一些搜索,但到目前为止我发现的最接近的是String.Split():
string s = "3,2,4,5,6";
string[] words = s.Split(',');
Run Code Online (Sandbox Code Playgroud)
但String.Split一次只需要1个分隔符.有没有更好的方法只抓住括号内的字符串?