小编Che*_*eng的帖子

这种常见做法是避免在字典中找不到密钥

我想知道,以下样式是否是一种常见的做法,以避免在词典中找不到键?

# default is 0
value = my_dic[100] if 100 in my_dic else 0
Run Code Online (Sandbox Code Playgroud)

python

11
推荐指数
1
解决办法
8893
查看次数

使用主题完全透明的ActionBarSherlock

我正在使用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机智分频器和半透明背景

为了禁用后台,我将以下代码放入SherlockFragmentActivity#onCreate.然后问题消失了.

getSupportActionBar().setBackgroundDrawable(null);
Run Code Online (Sandbox Code Playgroud)

SherlockFragmentActivity没有分隔线和透明背景

但是,我希望看到解决方案在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:backgroundbackground不起作用.我错过了什么吗?

android dialog transparent actionbarsherlock

11
推荐指数
1
解决办法
7401
查看次数

如果我使用和不使用IvParameterSpec启动AES密码,是否有任何区别

我想知道,如果我使用和不使用IvParameterSpec启动AES密码,有什么区别吗?

使用IvParameterSpec

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)

没有IvParameterSpec

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)

我测试了一些样本测试数据,他们的加密和解密结果相同.

但是,由于我不是安全专家,我不想错过任何东西,并创建一个潜在的安全循环漏洞.我在想,这是正确的方法吗?

java security encryption android aes

11
推荐指数
3
解决办法
1万
查看次数

如何使Activitly正确观察Lifecycle事件

目前,我需要执行一些操作

  • 应用程序启动.
  • 申请退出.
  • 但不是在活动娱乐,配置改变,......

因此,到目前为止,以下代码片段对我很有帮助.我从CommonWare中学到了这样的技巧 - https://commonsware.com/AndroidArch/previews/other-lifecycle-ownershttps://proandroiddev.com/react-to-app-foreground-and-background-events-with-processlifecycleowner -96278e5816fa

WeNoteApplication.java

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)

android

11
推荐指数
1
解决办法
2534
查看次数

从Java日历迁移到Joda日期时间

以前,当我第一次设计股票应用程序相关软件时,我决定使用它java.util.Date来表示股票的日期/时间信息.

后来,我意识到大多数方法都java.util.Date被弃用了.因此,很快,我重构了我的所有代码以供使用java.util.Calendar

但是,我遇到了两个缺点.

  1. 构造java.util.Calendar比较慢java.util.Date
  2. 在类的访问器getCalendar方法中Stock,我需要克隆一个副本,因为它Calendar是一个可变类

这是Stock.java的当前源代码

最近,我发现了Joda-Time.我做了以下基准,通过创建百万java.util.Date,java.util.Calendarorg.joda.time.DateTime.我发现在实例化过程中org.joda.time.DateTime表现更好java.util.Calendar.

这是基准测试替代文字 结果.

此实例化速度很重要,尤其是将创建许多Stocks实例,以表示股票的长期价格历史.

您认为从Java Calendar迁移到Joda Date Time是否值得获得应用程序速度性能?我需要注意什么陷阱?

java jodatime

10
推荐指数
1
解决办法
8489
查看次数

在头文件中有全局函数定义,避免重复的符号链接错误

我在标题文件中有以下代码.

#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头文件中.有没有什么技术可以做到这一点?或者我必须将定义分离到另一个文件?

c++

10
推荐指数
2
解决办法
6318
查看次数

我们什么时候应该使用LAYER_TYPE_HARDWARE

阅读http://developer.android.com/guide/topics/graphics/hardware-accel.html后,我对3种不同类型的分层技术的理解是(假设设备有GPU)

  • LAYER_TYPE_SOFTWARE - 绘图由软件的屏幕外位图存储器上的软件执行.然后,软件的屏幕外位图将传输到GPU.GPU 在屏幕上渲染位图.
  • LAYER_TYPE_NONE - GPU将直接在屏幕上绘制.
  • LAYER_TYPE_HARDWARE - GPU在GPU的屏幕外位图内存上执行绘制.GPU的屏幕外位图将由GPU 渲染到屏幕.

何时使用LAYER_TYPE_SOFTWARE

我理解某些绘制操作不受GPU支持setShadowLayer.因此,我们需要切换到LAYER_TYPE_SOFTWARE,以便绘制将由软件执行.

但是,由于软件的屏幕外位图内存转移到GPU操作,因此事情可能会变慢.

何时使用LAYER_TYPE_NONE

我认为这是大多数设备的默认设置.所以,我认为我们应该在大多数时候使用这种技术.

何时使用LAYER_TYPE_HARDWARE

我不知道何时使用这种技术.在我们应该应用LAYER_TYPE_HARDWARE技术时,我们非常感谢任何一个例子.

p/s另外,我对LAYER_TYPE _...的理解可能看似错误.如果你发现任何错误,请纠正我.谢谢.

android opengl-es

10
推荐指数
1
解决办法
2577
查看次数

为什么LiveData仍然通知处于onPause状态的Activity?

我有以下代码 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启动状态.对于活动,在两种情况下达到此状态:

after onStart call;
right before onPause call.
Run Code Online (Sandbox Code Playgroud)

我可以知道为什么会这样吗?

android android-livedata android-architecture-components

10
推荐指数
1
解决办法
1679
查看次数

如果我有一个长寿命LifeCycleOwner继续观察LiveData会导致资源泄漏吗?

在某些情况下,如Home Widget(AppWidgetProvider),我无法访问ActivityFragment.

通常,我使用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

但是,有一种情况

  1. LiveData无法触发回调.
  2. 因此,我没有在LiveData的回调中从LiveData中删除LifeCycleOwner.

在这种情况下,会导致资源泄漏吗?例如,GC注意到长寿命LifeCycleOwner正在观察LiveData A.虽然LiveDataA已经超出了范围,但GC不会解放LiveData A,因为长期生活LifeCycleObserver还在观察它吗?

如果是这样,我该如何解决这种泄漏?

android

10
推荐指数
1
解决办法
311
查看次数

从适用于Android的Google登录迁移到Firebase身份验证

目前,我们计划使用Google Sign-In for Android作为我们的服务器身份验证方法.

这是我们打算做的.

客户端(适用于Android的Google登录)

GoogleSignInAccount account = completedTask.getResult(ApiException.class);
// This idToken will sent to backend server.
String idToken = account.getIdToken();
Run Code Online (Sandbox Code Playgroud)

服务器端(适用于Android的Google登录)

// 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 firebase-authentication google-signin

10
推荐指数
1
解决办法
658
查看次数