以前,当我第一次设计股票应用程序相关软件时,我决定使用它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头文件中.有没有什么技术可以做到这一点?或者我必须将定义分离到另一个文件?
我有以下代码
<TextView
android:text="@string/hello"
style="?android:attr/listSeparatorTextViewStyle" />
Run Code Online (Sandbox Code Playgroud)
我会得到以下效果.

但是,我对色线感到不满意.我想有类似的东西

我希望它在holo中有蓝色线条.我尝试以下自定义样式.
<style name="MyOwnListSeperatorTextViewStyle">
<item name="android:background">@android:drawable/list_section_divider_holo_light</item>
<item name="android:textAllCaps">true</item>
<!-- Copy from Widget.TextView.ListSeparator -->
<item name="android:background">@android:drawable/dark_header_dither</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">?textColorSecondary</item>
<item name="android:textSize">14sp</item>
<item name="android:gravity">center_vertical</item>
<item name="android:paddingLeft">8dip</item>
</style>
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为我得到以下错误.
错误:错误:资源不公开.(在'android:background',值为'@ android:drawable/dark_header_dither').
有想法如何更改使用的线条颜色listSeparatorTextViewStyle?

嗨,我在日历应用程序中引用了取消/完成按钮.这两个按钮固定在顶部,即使您滚动底部的"窗体",它们也始终可见.
我可以知道,它是Action Bar的一部分吗?如果是这样,实现应该如何?
阅读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 _...的理解可能看似错误.如果你发现任何错误,请纠正我.谢谢.
目前,我们正在使用LiveData,ViewModel并Room在我们的项目。
我们正在使用Java 8。
我们在下面使用 build.gradle
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:1.1.1"
// Room (use 1.1.0-beta1 for latest beta)
implementation "android.arch.persistence.room:runtime:1.0.0"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
Run Code Online (Sandbox Code Playgroud)
我想知道我们什么时候需要使用
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
Run Code Online (Sandbox Code Playgroud)
(或者implementation "android.arch.lifecycle:common-java8:1.1.1"因为我们正在使用Java 8 ?!)
目前,我们的代码可以正常运行,而无需使用lifecycle:compiler或lifecycle:common-java8。
我们注意到AlarmManagerCompat,由于AlarmManager不同版本的操作系统中的行为不同,仅在我们的应用程序中实现警报/提醒功能并不是一种可靠的方法.(例如,打盹模式)
最初,我们计划使用Evernote的android-job库来帮助我们在应用程序中实现警报/提醒功能.
但是,在此过程中,我们也注意到谷歌刚刚发布WorkerManager.
到目前为止,WorkerManager当我们在应用程序退出后运行一些一次性后台作业(几乎是即时的,具有互联网连接约束)时,对我们来说效果很好.
我们计划使用WorkerManager实现警报/提醒功能.
我想知道,WorkerManager实现这样的功能有多可靠?有人尝试过吗?我们的目标是API 15及更高版本.
我有以下代码 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还在观察它吗?
如果是这样,我该如何解决这种泄漏?
当我将 WorkManager 从“2.2.0”升级到“2.3.0-rc01”时,出现以下新错误
当我导出 APK 时发生错误。
C:\app: Error: Remove androidx.work.impl.WorkManagerInitializer from your AndroidManifest.xml when using on-demand initialization. [RemoveWorkManagerInitializer]
Explanation for issues of type "RemoveWorkManagerInitializer":
If an android.app.Application implements
androidx.work.Configuration.Provider,
the default androidx.work.impl.WorkManagerInitializer needs to be removed
from the
AndroidManifest.xml file.
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我在 2.2.0 中没有收到这样的错误,因为从 2.1.0 开始引入了“按需初始化”。
我不确定将以下内容包含在我的AndroidManifest.xml.
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />
Run Code Online (Sandbox Code Playgroud)
目前,以下是我的Application班级。
public class MyApplication extends MultiDexApplication implements Configuration.Provider {
private static MyApplication me;
@Override
public void onCreate() {
super.onCreate();
me = …Run Code Online (Sandbox Code Playgroud) android ×8
android-architecture-components ×3
android-ui ×1
androidx ×1
c++ ×1
java ×1
jodatime ×1
opengl-es ×1