Articles of android

点击硬件菜单button,打开操作栏中的子菜单

标题解释了一切。 点击硬件菜单button时,我想在操作栏中打开一个子菜单 这是代码,它第一次正常工作,我点击菜单。 每隔一段时间它就会闪烁(打开并立即closures它) private Menu mainMenu; public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options, menu); mainMenu = menu; return true; } public boolean onKeyDown(int keyCode, KeyEvent event) { if(event.getAction() == KeyEvent.ACTION_DOWN){ switch(keyCode) { case KeyEvent.KEYCODE_MENU: mainMenu.performIdentifierAction(R.id.more, 0); return true; } } return super.onKeyDown(keyCode, event); } 这里是options.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > […]

Gradle无法通过公司代理连接到maven repo – 需要通过Sencha / Cordova进行configuration

我正在尝试使用Cordova为Android构build一个Sencha Touch应用程序。 但是,在gradle构build开始之后,当尝试连接到maven仓库时出现连接错误: [INF] [shellscript] Running: C:\xxx\gradlew cdvBuildDebug -b C:\xxx\application\cordova\platforms\android\build.gradle -Dorg.gradle.daemon=true [INF] [shellscript] [INF] [shellscript] FAILURE: Build failed with an exception. [INF] [shellscript] [INF] [shellscript] * What went wrong: [INF] [shellscript] A problem occurred configuring root project '''android'''. [INF] [shellscript] > Could not resolve all dependencies for configuration ''':classpath'''. [INF] [shellscript] > Could not resolve […]

解读多核性能跟踪(Eclipse / Android)

我正在开发一个Android游戏,在开发过程中我开始注意到一点点迟钝,所以我想尝试利用multithreading来获得乐趣和学习。 我的应用程序有3个线程: UI线程(应该大部分空闲) 游戏逻辑线程 graphics线程 我尽可能地最小化了线程2和3之间的关键部分,并认为游戏逻辑可以独立于渲染线程进行更新,然后在两个线程结束时,我可以有一个尽可能短的窗口,graphics从逻辑线程更新到游戏循环。 这应该允许两个线程在绝大多数时间独立工作。 在理论上听起来像是一场表演。 但是一旦我开始执行,我的performance就大大下降了。 它比以前更糟糕,更新和渲染的一个循环是花费50毫秒(20fps),所以它看起来像垃圾。 这只是渲染了20个三angular形,也许是20个纹理的四边形,这是一个非常简单的工作(我不敢想象当我实现适当的graphics时会是什么)。 无论如何,我采取了Android的DDMS跟踪configuration文件出错或可以改善。 http://i.stack.imgur.com/DDUYE.png 这是我的游戏大概3帧的视图。 到目前为止,这似乎大致上是我所期望的。 以蓝色突出显示的部分是locking的部分,看起来是正确的(保持glThread大多在等待,而locking)。 但是,一旦我解锁,我应该看到两个线程同时工作,它看起来像他们,但如果我看得更近: http://i.stack.imgur.com/vukXQ.png 我正在双核手机上进行开发,但是如果我理解了追踪的话,它看起来并不是什么并行的东西,更糟糕的是它似乎是每毫秒切换活动线程数百次! (除非我解释错误)。 所有这些上下文切换看起来好像对性能来说都是可怕的,所以我不确定它为什么要这么快速地来回切换。 所以在我长时间的解释之后,我想知道一些事情: 我的理解是正确的,轨迹中的填充矩形是活动线程,彩色线是睡眠线程? 否则他们是什么意思? 为什么我不能看到我的线程在一个所谓的双核心手机上同时运行? 为什么它切换活动线程这么快? 在DDMS中,我得到警告“警告:debugging器处于活动状态;方法跟踪结果将会偏斜”。 这有什么好担心的吗? 我怎样才能摆脱这个警告? (我通过运行启动应用程序,而不是通过debugging,如果它有所作为)

用全局的rxjava处理networkingexception进行翻新

我试图在全球范围内处理应用程序中的exception,以便翻新引发一个错误,我在一些特定的类中使用逻辑来处理这些错误。 我有一个接口 @POST("/token") AuthToken refreshToken(@Field("grant_type") String grantType, @Field("refresh_token") String refreshToken); 和观察 /** * Refreshes auth token * * @param refreshToken * @return */ public Observable<AuthToken> refreshToken(String refreshToken) { return Observable.create((Subscriber<? super AuthToken> subscriber) -> { try { subscriber.onNext(apiManager.refreshToken(REFRESH_TOKEN, refreshToken)); subscriber.onCompleted(); } catch (Exception e) { subscriber.onError(e); } }).subscribeOn(Schedulers.io()); } 当我从服务器(无效令牌或一些其他networking相关的错误)401得到我想刷新令牌,并重复其余的电话。 有没有办法做到这一点与rxjava所有rest调用与某种观察将会捕捉到这个错误的全球性,处理它,并重复抛出它的调用呢? 现在我正在使用主题赶上.subscribe()这样的错误 private static BehaviorSubject […]

如何为Jellybean(API 17)创build一个可用的AVD?

我尝试使用以下步骤在Kubuntu 17.04中为Jellybean(API 17)创buildAVD: 从Android Studio启动AVDpipe理器 点击“创build虚拟设备”button: selectNexus 4硬件configuration文件: 点击下一步” 点击“x86 Images”选项卡并select“Jelly Bean / 17 / x86 / Android 4.2(with Google APIs)”图片: 点击下一步” 保留默认设置: 点击“完成” 现在,由于Ubuntu 17.04(及其派生版)的一个不幸的问题,通过点击条目旁边的播放button,直接启动模拟器是不可能的。 (点击它什么也不做。)相反,我必须从terminal启动模拟器: $ cd ~/Android/Sdk/tools $ LD_PRELOAD='/usr/$LIB/libstdc++.so.6' ./emulator -avd Nexus_4_API_17 模拟器启动并出现主屏幕: 但是,立即与之交互就会发现问题。 相机显示错误: 点击“设置”应用程序中的“存储”会导致设置应用程序崩溃。 我做错了什么,我该如何解决这个问题? 编辑:我点击“显示高级设置”,并确认SD卡确实要创build: 我也确认文件~/.android/avd/Nexus_4_API_17.avd/sdcard.img.qcow2存在。 编辑:我遵循相同的程序来创build一个Kit Kat AVD(使用Nexus 5硬件configuration文件),问题不存在那里。 SD卡按预期工作。 编辑:我尝试使用mksdcard手动创build一个SD卡图像: mksdcard -l TEST 100M sdcard.img …然后将其直接传递给模拟器: emulator […]

RTL支持:仅对特定的UI组件禁用

我有一个自定义video播放器活动。 我被迫在我的应用程序中启用RTL支持。 但是这样做会导致从右到左alignment的ProgressBar。 (这看起来很丑陋) 我希望我的ProgressBar在启用RTL的应用程序中保持LTR。 有没有解决办法? PS我正在使用Android 4.2.2

Android ClassLoader内存泄漏

动机: 我正在使用我的Android应用程序中的一些本地库,我想在某个时间点从内存中卸载它们。 当加载加载本机库的类的ClassLoader被垃圾收集时,库会被卸载。 启示: 本地卸货 。 问题: 如果使用ClassLoader加载某个类(导致可能的内存泄漏),则不会收集垃圾回收。 本机库只能在应用程序中的一个ClassLoader中加载。 如果仍然有旧的ClassLoader挂在内存中,并且新的ClassLoader尝试在某个时间点加载相同的本地库,则会引发exception。 题: 如何以一种干净的方式卸载一个本地库(卸载是我的最终目标,不pipe它是一种糟糕的编程技术或类似的东西)。 为什么出现内存泄漏以及如何避免? 在下面的代码中,通过省略本地库加载代码简化了这种情况,只是演示了Classloader内存泄漏。 我在Android KitKat 4.4.2,API 19上testing这个。设备:Motorola Moto G. 对于演示,我有以下ClassLoader,派生于用于加载Android应用程序的PathClassLoader 。 package com.demo; import android.util.Log; import dalvik.system.PathClassLoader; public class LibClassLoader extends PathClassLoader { private static final String THIS_FILE="LibClassLoader"; public LibClassLoader(String dexPath, String libraryPath, ClassLoader parent) { super(dexPath, libraryPath, parent); } @Override protected void finalize() […]

Android中的任何一个可以提供我的例子Two_line_list_item?

任何一个可以给我提供two_line_list_item的例子吗?

启用streampipe理asmack android

我正在使用XEP-0198streampipe理面临一个问题。 基本上,我想要启用这个在Android上的消息丢失问题时,互联网随机disconect和服务器仍然有客户在线存在。 为了解决这个问题,我想使用XEP-0198,它使用请求和确认过程。 你可以在这里find更多。 基本上我用这个sm:3。 问题是,当我设置 XMPPConnection.DEBUG_ENABLED=true; 我得到sm:3在asmack内部的日志,但我无法通过任何连接添加任何packetListner。 这是asmackdebugging打印的内容: <r xmlns='urn:xmpp:sm:3'/><message from='test1@pinmessage.com/Smack' to='test1@pinmessage.com' id='CQUe6-5'><received xmlns='urn:xmpp:receipts' id='CQUe6-4'/></message><r xmlns='urn:xmpp:sm:3'/> 这是我从packetFilter得到的: <message id="CQUe6-5" to="test1@pinmessage.com" from="test1@pinmessage.com/Smack"><received xmlns='urn:xmpp:receipts' id='CQUe6-4'/></message> 我已经尝试了自定义数据包筛选器,通过查看聊天安全和yaxim的代码,但我没有得到如何获得这个<r xmlns='urn:xmpp:sm:3'/>在我的代码,以便我可以将收到的数据包的数量直接返回给服务器,这样服务器就可以将任何丢失的数据包发回给我。 我还通过添加下面的代码configuration提供商pipe理器: addSimplePacketExtension("sm", URN_SM_3); addSimplePacketExtension("r", URN_SM_3); addSimplePacketExtension("a", URN_SM_3); addSimplePacketExtension("enabled", URN_SM_3); addSimplePacketExtension("resumed", URN_SM_3); addSimplePacketExtension("failed", URN_SM_3); private static final String URN_SM_3 = "urn:xmpp:sm:3"; private static void addSimplePacketExtension(final String name, final String namespace) […]

如何在Android Manifest应用程序中添加多个`tools:replace`?

我正在使用一个在清单中有下面的库。 <application android:allowBackup="true" android:label="@string/app_name" android:supportsRtl="true"/> 但是,作为我用来包含该库的应用程序反而改为设置 <application android:allowBackup="false" android:label="@string/app_name" android:supportsRtl="false"/> 因此,它会像图书馆清单中的“android:supportsRtl =”true“`合并错误是必不可less的? 有时会造成错误 为了解决这个问题,我们只需要把下面的代码添加到我们的Manifest应用程序中。 tools:replace="android:supportsRtl" 和 tools:replace="android:allowBackup" 但是,添加两个tools:replace会在编译时出错。 我怎么能结合这两个tools:replace ? 我试了下面,它不工作。 tools:replace="android:supportsRtl|android:allowBackup"