我已经在我的应用程序中使用IAB几个月了,我注意到来自IAB的一些签名数据看起来像这样.(注意我为了简洁而删除了签名).
{"signedData":"{\"nonce\":-5355169768522252731,\"orders\":[]}","signature":"xxx...."}
Run Code Online (Sandbox Code Playgroud)
请注意,此签名数据响应中没有订单.有谁知道什么会导致这条消息从IAB服务发回?它似乎毫无价值.
因此,Android面临的挑战之一是各种设备规格(特别是设备内存).
我已经编写了我的模型对象以SoftReferences
懒惰加载的方式广泛使用Java ,因此VM可以自由地修剪当前未使用的数据模型部分,因为它认为合适,并且它们只是根据需要重新构建.
然而,在实践中的一个挑战SoftReferences
是,它们倾向于在几秒内被清除而变得弱引用而不是在VM内存不足之前徘徊,因此它们在允许模型修剪方面工作良好,但它们不要工作,因为它通常意味着没有任何记忆.理想情况下,在具有足够内存的设备上,您可以让用户将对象保留在内存中.
因此,SoftReferences
与LRU机制结合是很常见的,其中LRU保持指向最近引用的对象的硬指针.这当然不是理想的,因为它假定你有足够的内存用于所有这些几乎没有引用的对象.
知道什么是LRU的良好默认值也是一个挑战.
在一个完美的世界中,Android会使用它的低内存回调作为提示(因此我可以从一个小型LRU开始,并定期将其提升到低内存回调开始发生然后将其关闭以找到设备的良好值) ,但根据我的经验,这个回调似乎永远不会与实际的VM内存压力一致.
有没有人遇到过合理的方法来检测您的数据模型是否在特定设备上使用了太多内存?
Android不允许在cacheDir中创建子目录吗?鉴于第三方(例如advendors)肯定需要缓存他们自己的文件,我为我的缓存文件创建子目录并让我集成的第三方管理他们自己的缓存文件非常有意义.
有谁知道如何设置权限,以便您可以创建子目录?
防爆.以下代码似乎始终无法创建子目录.
File cacheDir = context.getCacheDir();
File subDir = new File(cacheDir, "subdir");
if ( !subDir.exists() ) {
if ( !subDir.mkdirs() )
Log.w(TAG, "Failed to create subdirectory in cache");
}
Run Code Online (Sandbox Code Playgroud) 我很好奇使用 xib 文件来布局 UITableViewCell 内容的正确方法。当我尝试按照在 Internet 上找到的所有步骤进行操作时,我总是得到
由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[<NSObject 0x10fe7d790> setValue:forUndefinedKey:]: 此类与键 statusLabel 的键值编码不兼容。”
所以这是相关的代码
@interface MyCell : UITableViewCell
@property (nonatomic,strong) IBOutlet UILabel* messageLabel;
@property (nonatomic,strong) IBOutlet UILabel* statusLabel;
Run Code Online (Sandbox Code Playgroud)
在我的 UIViewController 中,我都尝试过
-(void)viewDidLoad {
[self.tableView registerNib:[UINib nibWithNibName:@"MyCell"
bundle:[NSBundle mainBundle]]
forCellReuseIdentifier:@"CustomCellReuseID"];
}
Run Code Online (Sandbox Code Playgroud)
或使用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CustomCellReuseID";
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if ( !cell ) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil]
lastObject];
// or sometimes owner is nil e.g.
//cell = …
Run Code Online (Sandbox Code Playgroud) 当我的应用在Google Nexus 7平板电脑上运行时,此标准Android测试会返回false,以查看该设备是否配备了相机.
PackageManager pm = this.getPackageManager();
if(!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
// disable camera button
}
Run Code Online (Sandbox Code Playgroud)
现在我意识到Nexus 7没有配备内置相机应用程序,但是当我尝试启动相机活动时,我使用以下内容(为用户提供选择备用应用程序的选项).
File fTempCameraFullDirPath = new File(msTempCameraFullDirPath);
Uri outputFileUri = Uri.fromFile( fTempCameraFullDirPath );
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );
startActivityForResult(Intent.createChooser(cameraIntent, getString(R.string.select_camera_app)), REQUEST_CODE_CAMERA);
Run Code Online (Sandbox Code Playgroud)
现在显然我没有得到这个代码,因为相机的测试失败了,我禁用了按钮,但似乎只要我在Nexus 7桌面上安装了相机应用程序,我应该能够拍照.
有没有人知道我可以用来在这款平板电脑(或类似设备)上启用此功能的备用测试?
android ×4
android-ndk ×1
caching ×1
file ×1
ios ×1
java ×1
permissions ×1
subdirectory ×1
tablet ×1
uinib ×1
uitableview ×1
xib ×1