我正试图强迫PreferenceActivity刷新.有谁知道如何做到这一点?
我有一个ResetDefaultsPreference子类的类Preference,当被点击时,应该重置为默认所有其键以某个前缀开头的首选项.它可以工作,但是当我点击重置偏好时,该屏幕中的所有首选项都不会更新,直到我退出屏幕并返回.(这适用于某些自定义颜色首选项,但即使这样也不适用于某些ListPreferences - 对于那些我必须离开并重新进入PreferenceActivity自身以便显示更新值的人.)
我试图通过获取根视图来解决这个invalidate()问题,但这似乎不起作用.这是刷新显示的行.它是Preference子类的一部分,它保持Context用in创建它mContext.
((Activity)mContext).findViewById(android.R.id.content).invalidate();
Run Code Online (Sandbox Code Playgroud)
在更改和提交首选项值之后会发生这种情况.(值会更改,但显示不会.)有谁知道我如何强制PreferenceActivity自我刷新?
我正在使用NDK r5b在Android 2.3.x上进行开发.偶尔我的代码会崩溃,我想知道在哪里.当我有一个指针(即来自Android的堆栈跟踪)时,我已经知道如何在我的应用程序中获取相应的行.
但是,我经常看到像这样无用的堆栈跟踪(完整堆栈跟踪):
#00 pc 0006561a /system/lib/egl/libGLESv2_adreno200.so
#01 pc 0006b900 /system/lib/egl/libGLESv2_adreno200.so
#02 pc 0005aac8 /system/lib/egl/libGLESv2_adreno200.so
#03 pc 0001687a /system/lib/egl/libGLESv1_CM_adreno200.so
#04 pc 000096ce /system/lib/egl/libGLESv1_CM_adreno200.so
Run Code Online (Sandbox Code Playgroud)
或这个:
(gdb) bt
#0 0xafd0c51c in epoll_wait () from /Volumes/SecureCode/webos/rta/android/obj/local/armeabi/libc.so
#1 0xa81216a6 in ?? ()
Run Code Online (Sandbox Code Playgroud)
根本没有提到我的代码.
有没有办法获得比这更好的堆栈跟踪?为什么某些库函数"不透明",因为它们不允许回溯"透视"到调用函数,导致堆栈跟踪中的停止?
据我所知,调试这样的问题的唯一方法是在程序中的每个点使用日志记录和/或使用gdb逐步执行每一行.
是否有ROM可用于这些Android库的调试版本而不是运行时库,这会有帮助吗?(我只使用一部手机进行开发,所以我不担心保持全部功能.)(实际上,我注意到libc.so上面gdb堆栈跟踪的路径在我的应用程序目录中.我可能只是用不同的方式打包它(调试)libc.so,那会有帮助吗?)
最后一件事可能有所帮助:在logcat(第一个)的上述堆栈跟踪中,我的库在原始堆栈转储中被提及:
stack:
...
...
4471cb88 00000028
4471cb8c afd4649c
4471cb90 80b4eb71 /data/data/com.audia.dev.rta/lib/librta.so
4471cb94 00299180
...
...
Run Code Online (Sandbox Code Playgroud)
但那不是函数指针.可能是什么,在应用程序崩溃后会有任何帮助吗?我猜它可能不是,如果它是一个堆指针或类似的东西.
我在市场上有一个NDK应用程序,并获得有关SIGILL信号的本机崩溃报告.(我使用google breakpad生成本机崩溃报告.)以下是详细信息:
armeabi-v7a,与 NEON支持.0x399cc,信号是SIGILL,并且它在我的代码中.登记和拆卸:
r4 = 0x001d50f0 r5 = 0x001d50f0 r6 = 0x598e2a3c r7 = 0x00000000
r8 = 0x00000001 r9 = 0x001c22b0 r10 = 0x00000000 fp = 0x81216264
sp = 0x598e2a18 lr = 0x816399cb pc = 0x816399cc
0x000399c6 <_ZN8Analyzer15setExpAvgFactorEi+22>: blx 0x30508
0x000399ca <_ZN8Analyzer15setExpAvgFactorEi+26>: fconstd d16, #7
0x000399ce <_ZN8Analyzer15setExpAvgFactorEi+30>: vldr d17, [pc, #32] ; 0x399f2 <_ZN8Analyzer15setExpAvgFactorEi+66>
Run Code Online (Sandbox Code Playgroud)
这里有完整的源代码和汇编程序(很简单,基本上是2行C++.)
你可以看到它0x399cc在fconstd指令的中间.根据arm.com的说法添加了这个指令VFP-v3 …
我在GKE上有一个Kubernetes服务如下:
$ kubectl describe service staging
Name: staging
Namespace: default
Labels: <none>
Selector: app=jupiter
Type: NodePort
IP: 10.11.246.27
Port: <unnamed> 80/TCP
NodePort: <unnamed> 31683/TCP
Endpoints: 10.8.0.33:1337
Session Affinity: None
No events.
Run Code Online (Sandbox Code Playgroud)
我可以直接通过其中一个端点(10.8.0.21:1337)或通过节点端口(10.240.251.174:31683在我的情况下)从VM访问服务.但是,如果我尝试访问10.11.246.27:80,我什么也得不到.我也尝试过端口1337和31683.
为什么我不能通过其IP访问服务?我需要防火墙规则吗?
我正在尝试使用现有的Preference子类来保存颜色值.我没有编写类,但它应该在android-7及更高版本上工作(我正在编译为android-9目标.)完整的源代码可以在这里找到.这是保存首选项的位置:
@Override
public void onColorChanged(int color) {
if (isPersistent()) {
boolean ret = persistInt(color);
}
// (update preview box, other stuff)
}
Run Code Online (Sandbox Code Playgroud)
使用调试输出我可以告诉isPersistent()返回true,但persistInt()返回false.根据Android文档,persistInt()返回首选项是否持久; 这些如何回归不同的价值?(注意:setPersistent(true)从构造函数中显式调用.)
在任何情况下,都不会保存该值.一个调用getPersistedInt(defaultValue)返回默认值,甚至稍后在同一个类的实例中.在下面的代码中,getPersistedInt()始终调用并始终返回mDefaultValue.
public int getValue() {
try {
if (isPersistent()) {
mValue = getPersistedInt(mDefaultValue);
}
} catch (ClassCastException e) {
mValue = mDefaultValue;
}
return mValue;
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我怎样才能确保首选项保持不变?
我在C++中有一些简单的OpenGL ES代码,我在运行Android的手机,运行webOS的手机和使用SDL/OpenGL的Mac上运行.有问题的代码只是绘制了一个GL_LINE_STRIP存储在GLfloats 数组中的代码.以下是我尝试这样做的方法(版本1):
GLfloat array* = new GLfloat[2048];
//later... (array gets filled)
int howMany = 1024;
glVertexPointer(2, GL_FLOAT, 0, array); checkError();
glDrawArrays(GL_LINE_STRIP, 0, howMany); checkError();
Run Code Online (Sandbox Code Playgroud)
似乎它应该非常简单.但是,上面的代码段落在Android和我的Mac上的OpenGL驱动程序中(无论出于何种原因,似乎在webOS上运行正常.)这是我要做的就是避免这种情况(版本2):
GLfloat array* = new GLfloat[2048];
//later... (array gets filled)
int howMany = 1024;
for (unsigned i = 0; i < howMany; i += 789) {
glVertexPointer(2, GL_FLOAT, 0, array+i*2); checkError();
//this is not a bug: we draw one more than we increment by, or there is …Run Code Online (Sandbox Code Playgroud) android ×5
android-ndk ×3
c++ ×2
java ×2
arm ×1
assembly ×1
gdb ×1
kubernetes ×1
opengl ×1
opengl-es ×1