我已经开发了使用API 13和min-sdk以及API 13的Android应用程序构建.我想在选项卡中包含滑动,并且出于使用v4支持库的目的.
我有以下问题,
我正在编写一个脚本,我需要提供我的应用程序的PID.我可以通过以下命令列出所有进程及其PID,并可以看到我的应用程序的条目.
adb shell ps
这给了我一个巨大的进程列表.我需要一个条目(我可以进一步提供给另一个命令),所以我想用包名过滤这个结果.grep命令在我的Windows机器上不起作用.也尝试了以下命令,但它没有帮助.
adb shell ps name:my_app_package
我的Android应用程序有一个升级到较新版本的选项,较新版本APK我保持在SD卡路径下可用.单击"升级"选项,我将调用以下方法.
public static void launchInstaller(Activity act, String apkPath)
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
act.startActivityForResult(intent, 0);
}
Run Code Online (Sandbox Code Playgroud)
我包含FLAG_ACTIVITY_NEW_TASK的原因是,在升级之后,我想要"打开"和"完成"选项,如果我不使用此标志,则不会显示这些选项.
当上面的代码启动包安装程序时,它有两个选项OK&Cancel,当用户按下Cancel时,我想知道用户取消了它.但我无法知道因为onActivityResult被称为pre-maturely.我在阅读以下帖子后发现了这种情况的原因.
Android - startActivityForResult立即触发onActivityResult
他们要求我确保我用于启动活动的Intent没有设置FLAG_ACTIVITY_NEW_TASK.看这里:
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
特别要注意:"当调用者从正在启动的活动请求结果时,不能使用此标志."
如果活动是作为新任务的一部分启动的,那么Android将立即使用RESULT_CANCELED调用onActivityResult(),因为一个任务中的活动无法将结果返回给另一个任务,只有同一任务中的活动才能执行此操作.
但在我的情况下,我无法删除FLAG_ACTIVITY_NEW_TASK,否则我将无法在成功升级时获得"打开"和"完成"选项.
有人遇到过类似的问题吗?请帮助我,因为它让我疯了.
我已经开始将GCM集成到我的Android应用程序中.在启动教程的帮助下,我已经设置了示例演示,它的工作非常棒.我还了解当我的服务器将消息发送到GCM时收到的不同响应状态,我认为这表示我的服务器和GCM服务器之间的通信状态.
我的问题是,有没有办法获得GCM服务器和Android应用程序之间的通信状态?基本上是表示预期消息是否已成功传递的确认.我还读到,默认超时是4周,除非设置了time_to_live标志,这使我理解GCM维护队列并且肯定会确保消息传递.
但是,为了确保可靠性,作为第三方服务器,我是否应该重新发送相同的消息(如果GCM基础设施尚未处理)?如果我需要照顾重试,如何确定失败?
我的一种方法是,定义推送ID并将其与消息一起发送,一旦收到,Android应用程序将报告具有相应推送ID的服务器.如果在指定时间内未收到响应,则服务器将重试发送消息.这种方法在帖子的第二个答案中定义,将有助于监控GCM(特别是QA团队)所花费的时间.
在我的应用程序中,我支持手机/平板电脑的外形和单独的布局我使用选择器"布局"(对于手机),"layout-sw600dp"(对于平板电脑).
以下是详细信息:
http://android-developers.blogspot.in/2011/07/new-tools-for-managing-screen-sizes.html
Typical numbers for screen width dp are:
320: a phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480: a tweener tablet like the Streak (480x800 mdpi).
600: a 7” tablet (600x1024).
720: a 10” tablet (720x1280, 800x1280, etc).
Run Code Online (Sandbox Code Playgroud)
我正在使用Nexus 4手机,以下是它的主要内容
Size: 4.7 inches
Resolution: 768 x 1280 pixels
DPI: 318
dp: 386
Here is the dp calculation
dp = (px * 160)/dpi
dp = (768 * 160)/318
Run Code Online (Sandbox Code Playgroud)
当我在dp计算公式中使用768 px时,dp值为386,但是当我通过1280 px时,dp值为644.
根据以下理解,我认为Nexus 4版本将从sw600dp读取布局,但事实并非如此.
由于分辨率为宽度X高度,因此旋转设备时将反转.
我认为这是使用sw选择器与3.2之前的大型xlarge扇区进行的即兴创作.
在我的Android应用程序中,要求是从服务器获取图像并将它们缓存到堆内存中.
收到请求后,服务器首先对byte[]
into进行编码Base64String
并返回该字符串.并且,在将其呈现到ImageView
Android应用程序时,将其解码Base64String
回byte[]
,创建一个Bitmap
并将其打开ImageView
.
由于所有内容都在缓存中,因此应用程序有可能在某些时候内存不足,并严重崩溃.
为了防止内存不足,我在我的应用程序中定义了一个安全量程(例如5 MB).如果在任何时候可用内存低于此安全量程,则用户需要将一些图像标记为要删除的候选者.与此同时,应用程序将显示清除所选项目后将释放的估计内存.
在Bitmap
已经回收的一次用户离开图像了,所以Bitmap
实际上是不持有任何记忆,只要我们离开.
在一个特定的测试中,我下载了55个图像,我的堆从增长16 MB
到42 MB
.这意味着,55张图像占据了26 MB
.在我清除了所有这些之后,堆缩回了16 MB
.
但是,当我拿出所有Base64String
它的累积长度时,它就会出现11983840
.如果我认为一个字符作为1 byte
该11983840 bytes
品牌11.4 MB
问题是,长度的累积总和Base64String
是唯一可用的度量,这有助于让用户知道他的选择可以释放多少内存.
我也看到了以下问题,其中提到,每个3 Bytes
原始数据的Base64String
都会有4 Characters
.
问题是,单个字符中Base64String
包含多少字节?1,2或更多
如果1 character
是1 byte
,并且在我的测试中,堆增长和缩小了26 …
base64 android heap-memory character-encoding android-memory
我正在合并TagHelpers
到我的 MVC vNext 项目中,我意识到当我自己关闭 HTML 标签时它们不起作用。
@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
<label asp-for="FirstName"/> <!-- self closing tag -->
<span asp-validation-for="FirstName"/> <!-- self closing tag -->
Run Code Online (Sandbox Code Playgroud)
而且,当我放置结束标签时,我会看到正在显示的值。
<label asp-for="FirstName"></label>
<span asp-validation-for="FirstName"></span>
Run Code Online (Sandbox Code Playgroud)
生成的 HTML
<label for="FirstName">FirstName</label>
<span class="field-validation-error" data-valmsg-for="FirstName" data-valmsg-replace="true">
<span id="FirstName-error" class="">The FirstName field is required</span>
</span>
Run Code Online (Sandbox Code Playgroud)
我想知道什么,它有什么区别?而且,自我关闭配对标签是一个坏习惯。如果您知道一些讨论此设计原则的文章,请与我分享,将不胜感激。
CustomerEntryModel
[Required]
public String FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)
CustomerController.cs
[HttpGet]
[Route("Get")]
public IActionResult Get()
{
CustomerEntryModel model = new CustomerEntryModel();
return View("CustomerEntry", model);
}
[HttpPost]
[Route("Update")]
public ActionResult Update([FromForm]CustomerEntryModel model)
{
if (!ModelState.IsValid)
{
return View("CustomerEntry", model);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
CustomerEntry.cshtml
@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
<form asp-controller="Customer" asp-action="Update" method="post">
<input type="text" asp-for="FirstName" />
<span asp-validation-for="FirstName" />
<input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
我没有包含jQuery验证库,因此验证发生在服务器端.现在,当我提交名为空的页面时,执行更新操作并收到相同的视图,但没有任何错误.
而不是<span asp-validation-for="FirstName" />
标记助手,如果我使用html助手,@Html.ValidationMessageFor(m => m.FirstName)
我得到名字所需的错误.
根据我的理解,TagHelper
扩展了传统行为,HtmlHelper
提供HTML友好的开发体验.这意味着,适用的东西必须HtmlHelper
与它的TagHelper …
我的观点分为部分观点.因此,在提交时我的模型没有正确重建.
页面视图显示员工数据,其中Employee.Contactinfo是_contactInfo局部视图的模型,其中还具有部分视图_phoneInfo以呈现具有模型Employee.ContactInfo.PhoneInfo的电话信息.
现在的问题是属性的名称.渲染时的Employee.ContactInfo.PhoneInfo.Contact1名称为"Contact1",因此在提交时模型未正确创建,我获得了Employee的原始数据,但是像ContactInfo这样的复杂类型为null.
我认为解决方案是在渲染局部视图时添加前缀.如何在MVC 6中执行以下操作?
employee.cshtml
@model Employee
<% Html.RenderPartial("_conctactInfo", Model.ContactInfo, new ViewDataDictionary
{
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "ContactInfo" }
})
%>
Run Code Online (Sandbox Code Playgroud)
_contactInfo.cshtml
@model ContactInfo
<% Html.RenderPartial("_phoneInfo", Model.PhoneInfo, new ViewDataDictionary
{
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "PhoneInfo" }
})
%>
Run Code Online (Sandbox Code Playgroud)
_phoneInfo.cshtml
@model PhoneInfo
<input asp-for="@Model.Contact1" />
Run Code Online (Sandbox Code Playgroud) asp.net-mvc partial-views asp.net-mvc-partialview asp.net-core-mvc
我目前正在编写自定义所需的验证属性,并且我想在值为 null 或默认值时恢复错误。对于默认值,我的意思是“”代表字符串,0代表整数,0.0代表双精度,空代表对象。
为了实现这一目标,我调用以下函数,该函数适用于任何类型
protected bool IsNullOrDefault<T>(T value)
{
return object.Equals(value, default(T));
}
Run Code Online (Sandbox Code Playgroud)
以下是测试:
object obj = null;
bool flag = IsNullOrDefault(obj));
Run Code Online (Sandbox Code Playgroud)
标志=真
int i = 0;
bool flag = IsNullOrDefault(i);
Run Code Online (Sandbox Code Playgroud)
标志=真
double d = 0.0;
Console.WriteLine(IsNullOrDefault(d));
Run Code Online (Sandbox Code Playgroud)
标志=真
object value = 0;
Console.WriteLine(IsNullOrDefault(value));
Run Code Online (Sandbox Code Playgroud)
标志=假
这里对象内部又包含了int,但它仍然认为它是一个对象,其默认值为null,当前值为0。所以它返回False。
问题是,我要重写的框架方法为我提供了对象值,因此它将始终与上面提到的最后一个场景相匹配。
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{ ....
}
Run Code Online (Sandbox Code Playgroud)
根据值,我们如何将对象转换为实际类型(在本例中为int )?因此,即使对于上面的最后一个场景,我也会收到True 。
android ×6
tag-helpers ×2
adb ×1
asp.net-core ×1
asp.net-mvc ×1
base64 ×1
c# ×1
heap-memory ×1
html ×1
null ×1
object ×1