所以我刚为我的应用程序实现了一个小部件.它通过我的数据从数据库中获取数据ContentProvider.我在清单中定义了自己的读/写权限,说明我使用它们(似乎没有什么区别),并在内容提供程序中要求它们:
<!-- Define my permissions for the provider -->
<permission
android:name="com.nononsenseapps.notepad.permissions.read"
android:description="@string/permission_read_desc"
android:label="@string/permission_read_label"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
android:protectionLevel="normal" />
<permission
android:name="com.nononsenseapps.notepad.permissions.write"
android:description="@string/permission_write_desc"
android:label="@string/permission_write_label"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
android:protectionLevel="normal" />
......
<uses-permission android:name="com.nononsenseapps.notepad.permissions.read" />
<uses-permission android:name="com.nononsenseapps.notepad.permissions.write" />
<uses-permission android:name="android.permission.BIND_REMOTEVIEWS" />
......
<provider
android:name=".NotePadProvider"
android:authorities="com.nononsenseapps.NotePad"
android:enabled="true"
android:exported="true"
android:label="@string/app_name"
android:readPermission="com.nononsenseapps.notepad.permissions.read"
android:syncable="true"
android:writePermission="com.nononsenseapps.notepad.permissions.write" >
<grant-uri-permission android:pathPattern=".*" />
</provider>
Run Code Online (Sandbox Code Playgroud)
我通过a更新我的小部件Service(根据小部件教程):
<!-- List Widget -->
<receiver android:name="com.nononsenseapps.notepad.widget.ListWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/listwidgetinfo" />
</receiver>
<service
android:name="com.nononsenseapps.notepad.widget.ListWidgetService"
android:exported="false"
android:permission="android.permission.BIND_REMOTEVIEWS" />
Run Code Online (Sandbox Code Playgroud)
而这Service反过来做到这一点(包括一堆代码):
/**
* …Run Code Online (Sandbox Code Playgroud) 我找到了一个带缩放缩放的图库示例项目,并修复了一些错误.你可以在这里下载我的代码
它仅支持全屏.它始终将图像置于屏幕高度中心.但我想将标题视图放在屏幕顶部并调整图像的位置.图像位置应为:
header height + (screen height - header height) / 2
Run Code Online (Sandbox Code Playgroud)
我不太擅长使用Matrix.任何人都知道如何使自定义图库可以在任何尺寸(不仅仅是全屏)工作?
我将非常感谢有关如何处理操作系统查杀长期服务的一些指导.
业务场景:
应用程序记录BTT轨道,可能持续数小时.它还可以在地图上显示轨道以及相关统计数据.
应用程序用户界面使用户能够开始/停止跟踪记录并在地图上查看实时跟踪.
在开始跟踪记录之后,用户可以退出应用程序并关闭屏幕(以节省电量),并且只有服务将保持运行以保持记录更新到数据库(显示通知),直到用户再次启动活动并要求停止记录,这导致服务终止.
问题:
在可变时间(从40分钟到1个半小时)之后,录制服务在没有任何警告的情况下被杀死.由于BTT出场可能需要几个小时,这导致跟踪录音不完整.
一些其他信息:
服务以启动START_STICKY并获取PARTIAL_WAKE_LOCK,并在与主活动相同的过程中运行.
以用户定义的速率从1秒到几分钟获取(并记录)新位置.我从Android文档中了解到,这是长期运行服务的预期操作系统行为.
题:
拥有性能良好的应用程序以满足业务场景要求的最佳架构设计方法是什么?
我可以想到几个选项(我不喜欢它们中的任何一个),但我希望某人如何面对并解决类似问题的指导:
感谢所有能够就此主题分享一些智慧的人.
我能够ffmpeg使用摇滚播放器构建脚本构建库.
现在我有这个.so文件,我该如何播放视频?我希望LinearLayout在我的小视频中显示这个视频Activity.
可能吗?
更新:我知道使用VideoView或MediaPlayer+ 播放视频很容易SurfaceView.我只想更多地了解ffmpeg库以及如何在Android中显示帧Activity.
我正试图用我的画布使用Android的硬件加速.我曾经有过一个SurfaceView我lockCanvas()用来获得画布的画面,我稍后会画画,但我改变了,TextureView因为我无法SurfaceView使用硬件加速.我目前正试图让这个画布使用硬件加速.
Canvas canvas = this.lockCanvas();
System.out.println(this.isHardwareAccelerated() + ", " + canvas.isHardwareAccelerated());
Run Code Online (Sandbox Code Playgroud)
给我输出:true,false(this是a TextureView)
有谁知道为什么canvas不是硬件加速,以及如何做到这一点?
编辑:据我所知,似乎我必须使用OpenGL.但是,我仍然想知道是否有任何宣布的计划可以为这样的画布提供硬件加速.
在后台执行某些操作然后更新UI很难在Android中正确实现.它设计得很糟糕.典型的例子是AsyncTask,它从Web获取内容并显示结果.这有两个问题:
AsyncTask引用了Activity(因为它需要更新其UI).屏幕方向更改后,重新启动活动.但是AsyncTask仍然引用旧的被破坏的Activity,因此无法更新新Activity的UI.
这可能导致OutOfMemoryException.想象一下,你有一个包含大量位图的Activity,并启动一些AsyncTask.您按BACK(活动已完成)但AsyncTask仍在运行,并且因为它引用了Activity,所以带有位图的Activity仍在内存中.重复此操作(开始活动和返回),你的力量迟早会关闭.
这可以解决,但它太复杂了.在一个Activity中,我有3个不同的AsyncTasks,每个都可以同时在多个实例中运行.正确实现这一点令人沮丧.代码变得非常难以理解和调试.
Honeycomb Loaders可以解决这个问题吗?有没有办法在pre-Honeycomb Android版本中使用它们?
我正在尝试使用猴子练习工具来强调测试我的Android应用程序.
默认情况下,该工具将执行具有类别Intent.CATEGORY_LAUNCHER或 Intent.CATEGORY_MONKEY根据文档的活动.
package="my.android"
<activity android:name=".activities.MyApp">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".activities.MyScreen">
<intent-filter>
<category android:name="android.intent.category.MONKEY"/>
</intent-filter>
</activity>
<activity android:name=".activities.MySettings"/>
Run Code Online (Sandbox Code Playgroud)
我不想让 Monkey设置MySettings.
在我的实际情况中,这是因为该活动进行了注销.因此,在注销后,无法登录以便继续测试其余的屏幕,这是测试的全部概念.
./adb shell monkey -p my.android -v 500
:Monkey: seed=0 count=500
:AllowPackage: my.android
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
..
// Allowing start of Intent { cmp=my.android/.activities.MySettings} in package my.android
..
Run Code Online (Sandbox Code Playgroud)
它应该拒绝而不是允许我猜.任何想法如何避免猴子进入我不想要的活动?
我有一个Android应用程序用于将.png图像从Android应用程序的资产文件夹传输到我的本地服务器.我需要获取资产文件夹中的图像路径,请参阅下面的代码,
String stringPath = "android.resource//"+getPackageName()+"/raw/sample/logout.png";
File f = new File(stringPath);
Run Code Online (Sandbox Code Playgroud)
如果我使用上面的代码,我得到"文件未找到异常".那么如何在资产文件夹中获取图像路径?
在我的应用程序中,我使用服务与我们的服务器进行通信.该服务生成多个消息队列线程来处理具有不同优先级的任务.
这个模型已经使用了大约一年没有大问题.但是,最近,我发现onCreate我的服务类被多次调用了一段时间.onDestroy从不在两次onCreate通话之间调用.因此,我没有机会杀死现有的线程.一旦发生此行为,服务内部就会出现重复的线程.
我唯一改变的是运行服务,因为前台服务是用户登录应用程序.我想知道前台服务是否会导致问题.
有任何想法吗?