我想知道,以下样式是否是一种常见的做法,以避免在词典中找不到键?
# default is 0
value = my_dic[100] if 100 in my_dic else 0
Run Code Online (Sandbox Code Playgroud) 我正在使用ActionBarSherlock 4.0.2.
我需要一个完全透明的动作条(没有霓虹色底部分隔线).因此,我有以下风格:
<style name="AppTheme" parent="@style/Theme.Sherlock">
<item name="windowActionBarOverlay">true</item>
<item name="icon">@drawable/ic_home</item>
<item name="titleTextStyle">@style/ActionBarCompatTitle</item>
<item name="android:windowFullscreen">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)
通过使用上面的代码,我仍然会有以下效果.

为了禁用后台,我将以下代码放入SherlockFragmentActivity#onCreate.然后问题消失了.
getSupportActionBar().setBackgroundDrawable(null);
Run Code Online (Sandbox Code Playgroud)

但是,我希望看到解决方案在styles.xml而不是Java代码中实现,因为我有许多其他设备具有不同的屏幕配置.我将styles.xml修改为以下内容,而不使用Java代码中前面提到的修复程序.
<style name="AppTheme" parent="@style/Theme.Sherlock">
<item name="windowActionBarOverlay">true</item>
<item name="icon">@drawable/ic_home</item>
<item name="titleTextStyle">@style/ActionBarCompatTitle</item>
<item name="android:windowFullscreen">true</item>
<item name="android:background">@drawable/transparent</item>
<item name="background">@drawable/transparent</item>
</style>
Run Code Online (Sandbox Code Playgroud)
但是,霓虹灯分频器仍然可见.似乎我的修复使用android:background和background不起作用.我错过了什么吗?
我想知道,如果我使用和不使用IvParameterSpec启动AES密码,有什么区别吗?
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(new byte[16]));
Run Code Online (Sandbox Code Playgroud)
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
Run Code Online (Sandbox Code Playgroud)
我测试了一些样本测试数据,他们的加密和解密结果相同.
但是,由于我不是安全专家,我不想错过任何东西,并创建一个潜在的安全循环漏洞.我在想,这是正确的方法吗?
目前,我需要执行一些操作
因此,到目前为止,以下代码片段对我很有帮助.我从CommonWare中学到了这样的技巧 - https://commonsware.com/AndroidArch/previews/other-lifecycle-owners和https://proandroiddev.com/react-to-app-foreground-and-background-events-with-processlifecycleowner -96278e5816fa
public class WeNoteApplication extends Application {
public static class AppLifecycleObserver implements DefaultLifecycleObserver {
@Override
public void onResume(LifecycleOwner owner) {
// Do something when the application launched.
// But not during activity recreation, configuration change, ...
}
@Override
public void onPause(LifecycleOwner owner) {
// Do something when the application quit.
// But not during activity recreation, configuration change, ...
}
}
private static final AppLifecycleObserver appLifecycleObserver = new AppLifecycleObserver();
@Override …Run Code Online (Sandbox Code Playgroud) 以前,当我第一次设计股票应用程序相关软件时,我决定使用它java.util.Date来表示股票的日期/时间信息.
后来,我意识到大多数方法都java.util.Date被弃用了.因此,很快,我重构了我的所有代码以供使用java.util.Calendar
但是,我遇到了两个缺点.
java.util.Calendar比较慢java.util.DateStock,我需要克隆一个副本,因为它Calendar是一个可变类这是Stock.java的当前源代码
最近,我发现了Joda-Time.我做了以下基准,通过创建百万java.util.Date,java.util.Calendar和org.joda.time.DateTime.我发现在实例化过程中org.joda.time.DateTime表现更好java.util.Calendar.
这是基准测试
结果.
此实例化速度很重要,尤其是将创建许多Stocks实例,以表示股票的长期价格历史.
您认为从Java Calendar迁移到Joda Date Time是否值得获得应用程序速度性能?我需要注意什么陷阱?
我在标题文件中有以下代码.
#pragma once
class error_code {
public:
unsigned __int64 hi;
unsigned __int64 lo;
};
std::ostream& operator<< (std::ostream& o, const error_code& e) {
return o << "[" << e.hi << "," << e.lo << "]";
}
Run Code Online (Sandbox Code Playgroud)
我得到链接错误,当项目中有2个cpp包含此头文件时.
错误LNK2005:"类error_code __cdecl运算符|(类error_code const&,类ViTrox :: error_code const&)"(?? U @@ YA?AVerror_code @ 0 @ ABV10 @ 0 @ Z)已在xxx.obj中定义
我知道如果我将定义移动operator<<到cpp文件或DLL文件,我可以解决这个问题.
但是,我只想将它们放在SINGLE头文件中.有没有什么技术可以做到这一点?或者我必须将定义分离到另一个文件?
阅读http://developer.android.com/guide/topics/graphics/hardware-accel.html后,我对3种不同类型的分层技术的理解是(假设设备有GPU)
我理解某些绘制操作不受GPU支持setShadowLayer.因此,我们需要切换到LAYER_TYPE_SOFTWARE,以便绘制将由软件执行.
但是,由于软件的屏幕外位图内存转移到GPU操作,因此事情可能会变慢.
我认为这是大多数设备的默认设置.所以,我认为我们应该在大多数时候使用这种技术.
我不知道何时使用这种技术.在我们应该应用LAYER_TYPE_HARDWARE技术时,我们非常感谢任何一个例子.
p/s另外,我对LAYER_TYPE _...的理解可能看似错误.如果你发现任何错误,请纠正我.谢谢.
我有以下代码 Activity
@Override
public void onPause() {
super.onPause();
if (isFinishing()) {
final LiveData<StickyNoteConfig> stickyNoteConfigLiveData = StickyNoteConfigRepository.INSTANCE.getStickyNoteConfig(mAppWidgetId);
stickyNoteConfigLiveData.removeObservers(this);
stickyNoteConfigLiveData.observe(this, stickyNoteConfig -> {
// Weird, I still can receive call back.
// I thought "this" is no longer active?
});
}
}
Run Code Online (Sandbox Code Playgroud)
我感到困惑的Observer是,虽然this活动已经处于onPause状态,但仍然被触发了?根据https://developer.android.com/reference/android/arch/lifecycle/Lifecycle.State#STARTED
为LifecycleOwner启动状态.对于活动,在两种情况下达到此状态:
Run Code Online (Sandbox Code Playgroud)after onStart call; right before onPause call.
我可以知道为什么会这样吗?
在某些情况下,如Home Widget(AppWidgetProvider),我无法访问Activity或Fragment.
通常,我使用ProcessLifecycleOwner.get()或以下LifeCycleOwner观察LiveData.
public enum ForeverStartLifecycleOwner implements LifecycleOwner {
INSTANCE;
private final LifecycleRegistry mLifecycleRegistry;
ForeverStartLifecycleOwner() {
mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,在回调中LiveData,我将尝试通过使用LifeCycleOwner来进一步观察.LiveDataliveData.removeObserver
但是,有一种情况
在这种情况下,会导致资源泄漏吗?例如,GC注意到长寿命LifeCycleOwner正在观察LiveData A.虽然LiveDataA已经超出了范围,但GC不会解放LiveData A,因为长期生活LifeCycleObserver还在观察它吗?
如果是这样,我该如何解决这种泄漏?
目前,我们计划使用Google Sign-In for Android作为我们的服务器身份验证方法.
这是我们打算做的.
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
// This idToken will sent to backend server.
String idToken = account.getIdToken();
Run Code Online (Sandbox Code Playgroud)
// Based on received idToken from client, backend server will call https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=...
// to identify who is this user.
{
// These six fields are included in all Google ID Tokens.
"iss": "https://accounts.google.com",
"sub": "110169484474386276334",
"azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
"aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
"iat": "1433978353",
"exp": "1433981953",
// These seven fields are only included when the user has granted …Run Code Online (Sandbox Code Playgroud) android ×7
java ×2
aes ×1
android-architecture-components ×1
c++ ×1
dialog ×1
encryption ×1
jodatime ×1
opengl-es ×1
python ×1
security ×1
transparent ×1