小编Che*_*eng的帖子

我应该使用threeten而不是joda-time

我遇到了https://blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html.

1)我目前正在将Java Calendar迁移到joda-time.我想知道,我应该使用threeten而不是joda-time吗?三生产准备好了吗?

2)三个库和joda-time库可以在同一个应用程序中一起存在吗?因为我正在使用一些使用joda-time库的第三方库.

3)joda-time会不会成为一个放弃项目,因为有三个?

java jodatime jsr310

20
推荐指数
2
解决办法
3679
查看次数

在Android 4中启用android:largeHeap,并在Android 2.3中禁用它

目前,我有一段代码,设计用于在Android 2.3和4+中运行

如果android:largeHeap在AndroidManifest.xml中应用代码,代码将执行得更好(大多数情况下它不会有OutOfMemory异常).

<application
    android:name=".MyApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:screenOrientation="nosensor"
    android:largeHeap="true"
Run Code Online (Sandbox Code Playgroud)

目前,我android:minSdkVersion需要设置为15而不是10(Android 2.3).如果没有,android:largeHeap则在AndroidManifest.xml中不允许.

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="15" />
Run Code Online (Sandbox Code Playgroud)

在单个APK中,我可以设置多少

  • android:largeHeap如果我在Android 4+中使用选项
  • android:largeHeap如果我在Android 2.3中,请不要使用选项

android

20
推荐指数
2
解决办法
2万
查看次数

在某些配置更改期间,Loader无法保留自身

根据http://developer.android.com/guide/components/loaders.html,有关加载器的一个好处是,它能够在配置更改期间保留其数据.

在配置更改后重新创建时,它们会自动重新连接到最后一个加载器的光标.因此,他们不需要重新查询他们的数据.

但是,它在所有情况下都不能很好地工作.

我采取以下简单的例子.它是一个FragmentActivity,主持一个Fragment.它Fragment本身拥有AsyncTaskLoader.

以下3种情况非常有效.

首次启动时(OK)

创建了1个加载程序,并loadInBackground执行一次.

在简单旋转期间(OK)

没有创建新的加载器,loadInBackground也没有被触发.

启动子活动,按下后退按钮(OK)

没有创建新的加载器,loadInBackground也没有被触发.

但是,在以下场景中.

启动子活动 - >旋转 - >按下后退按钮(错误)

那时,旧的装载机onReset被称为.旧装载机将被销毁.将创建新的加载器loadInBackground并再次触发新的加载器 .

我期待的正确行为是,不会创建新的加载器.

加载器相关代码如下.我在Android 4.1模拟器下运行代码.

package com.example.bug;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MainFragment extends Fragment implements LoaderManager.LoaderCallbacks<Integer> {
    private static class IntegerArrayLoader extends AsyncTaskLoader<Integer> …
Run Code Online (Sandbox Code Playgroud)

android

20
推荐指数
1
解决办法
4797
查看次数

ProGuard中-keep和-keepclassmembers有什么区别?

我通过http://proguard.sourceforge.net/index.html#manual/usage.html阅读,但无法得到他们的分歧.

我测试了2个不同的选项并反编译结果.两者似乎都产生了相同的结果.

-keep class * implements android.os.Parcelable {
    *;
}
Run Code Online (Sandbox Code Playgroud)
-keepclassmembers class * implements android.os.Parcelable {
    *;
}
Run Code Online (Sandbox Code Playgroud)

android proguard

20
推荐指数
1
解决办法
8929
查看次数

为什么我们允许在Java中引用枚举成员的枚举成员?

鉴于以下枚举:

enum Repeat {
    Daily,
    Weekly,
    Yearly
}
Run Code Online (Sandbox Code Playgroud)

我意识到我们能够这样写它:

Repeat repeat = Repeat.Daily.Weekly.Yearly.Weekly;
Run Code Online (Sandbox Code Playgroud)

这相当于:

Repeat repeat = Repeat.Weekly;
Run Code Online (Sandbox Code Playgroud)

我可以知道为什么允许这样的语法吗?有没有办法让编译器警告我们不要这样做?

java enums

20
推荐指数
2
解决办法
779
查看次数

为什么备份相关的过程可能导致应用程序的onCreate不执行?

通常有以下Application课程

public class WeNoteApplication extends MultiDexApplication {
    public static WeNoteApplication instance() {
        return me;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        me = this;
Run Code Online (Sandbox Code Playgroud)

在正常情况下,ApplicationonCreate将永远是入口点之前称为Activity小号的onCreate“。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Normally, it will NOT be null.
        android.util.Log.i("CHEOK", "WeNoteApplication -> " + WeNoteApplication.instance());
Run Code Online (Sandbox Code Playgroud)

但是,如果在启动应用程序时运行以下命令

c:\yocto>adb shell bmgr restore com.yocto.wenote
restoreStarting: 1 packages
onUpdate: 0 = com.yocto.wenote
restoreFinished: 0
done
Run Code Online (Sandbox Code Playgroud)

该应用程序将关闭。如果是,我点击应用程序图标以再次启动。这是怎么回事

  1. ApplicationonCreate未执行! …

java android android-workmanager

20
推荐指数
2
解决办法
412
查看次数

初始化引用 - 警告C4355:'this':用于基本成员初始化列表

class A;

class B {
public:
    B(A& a) : a(a) {}
private:
    A& a;
};

/* Method 1 */
/* warning C4355: 'this' : used in base member initializer list */
/*
class A {
public:
    A() : b(*this) {}

private:
    B b;
};
*/

/* Method 2 */
/* But I need to manually perform memory dellocation. */
class A {
public:
    A() { b = new B(*this); }
    ~A() { delete b; }

private:
    B* b;
};

int …
Run Code Online (Sandbox Code Playgroud)

c++

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

当涉及从finally块返回的值时,在try块中有return语句是好的做法

我想知道,是不是很好的做法,returntry块?

package debug;

/**
 *
 * @author Owner
 */
public class Main {

  public static void main(String[] args) {
    System.out.println(fun());
  }

  static boolean cleanup() {
    // Fail to cleanup.
    return false;
  }

  static boolean fun() {
    boolean everything_is_fine = true;
    try {
      System.out.println("open file stream");
      return everything_is_fine;
    } finally {
      everything_is_fine = cleanup();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我首先想到false会打印出来.但是,这是输出:

open file stream
true
Run Code Online (Sandbox Code Playgroud)

如您所见,如果我returntry块内有语句,我将在finally清理期间错过失败状态.

我要把代码作为:

  static boolean fun() {
    boolean …
Run Code Online (Sandbox Code Playgroud)

java

19
推荐指数
1
解决办法
2万
查看次数

解决和解决"网络使用过多(背景)"的正确方法

问题背景

目前,我们面临来自Android Vital报告的" 网络使用率过高(背景) ".过去30天是0.04%,但我们只有9%好

  • 过去30天 - 0.04%
  • 基准 - 优于9%

在此输入图像描述

在此输入图像描述

因为只有超过9%看起来像一个可怕的事情.我们决定认真研究这个问题.

该应用程序是一个笔记应用程序(https://play.google.com/store/apps/details?id=com.yocto.wenote),它提供一个可选的特征-同步应用程序结束后,以背景云英寸

这就是我们在后台执行同步到云的方式.

  1. 我们用WorkManager.
  2. 在应用程序onPause,计划OneTimeWorkRequest,有约束NetworkType.CONNECTED.工人计划以8秒的延迟开始.
  3. 如果失败,我们重试使用BackoffPolicy.LINEAR,延迟时间为1.5小时.
  4. 最大重试次数为1次.这意味着,应用程序关闭后应用程序再次重新打开.同步到云进程的最大执行次数为2.
  5. 数据的大小各不相同,可以是几KB到几百MB.

其他信息我们如何执行同步

  1. 我们正在使用Google Drive REST API.
  2. 我们正在从Google Drive App Data文件夹下载zip文件,在本地执行数据合并,然后压缩,并将单个zip文件重新上传回Google Drive App Data文件夹.
  3. zip文件大小可以从几KB到几百MB不等.这是因为我们的笔记应用程序支持图像作为附件.

分析

我们唯一的信息是https://developer.android.com/topic/performance/vitals/bg-network-usage.

当应用程序在后台连接到移动网络时,应用程序会唤醒CPU并打开收音机.反复这样做可能会耗尽设备的电池电量.如果应用程序处于PROCESS_STATE_BACKGROUND或PROCESS_STATE_CACHED状态,则认为该应用程序在后台运行.......当Android应用程序在0.10%的电池会话中在后台运行时,每小时发送和接收总计50 MB的总量时,Android vitals认为后台网络使用率过高.

  1. 我们启动后台同步作业,在8秒之后ApplicationonPause.在此期间,应用程序内部或外部PROCESS_STATE_BACKGROUND/ PROCESS_STATE_CACHED?我们怎样才能避免运行中PROCESS_STATE_BACKGROUND/ PROCESS_STATE_CACHED
  2. " 在0.10%的电池续航时间在后台运行 "是什么意思?我们怎能避免这样的?
  3. 另一个假设是同步文件太大,并且使用了太多数据.很快,我们注意到这种假设可能不正确.我们注意到根据" 每小时移动网络使用情况(背景) ",数据大小从0MB到5MB.

在此输入图像描述


问题

我的问题是

  1. 这种" …

android android-workmanager

19
推荐指数
1
解决办法
506
查看次数

有哪些方法可以避免 String.substring 返回具有无效 unicode 字符的子字符串?

最近,只有我注意到,有可能substring返回带有无效 unicode 字符的字符串。

例如

public class Main {

    public static void main(String[] args) {
        String text = "_Salade verte";

        /* We should avoid using endIndex = 1, as it will cause an invalid character in the returned substring. */
        // 1 : ?
        System.out.println("1 : " + text.substring(0, 1));

        // 2 : 
        System.out.println("2 : " + text.substring(0, 2));

        // 3 : _
        System.out.println("3 : " + text.substring(0, 3));

        // 4 : _S
        System.out.println("4 : " + text.substring(0, 4)); …
Run Code Online (Sandbox Code Playgroud)

java android

19
推荐指数
2
解决办法
770
查看次数

标签 统计

android ×6

java ×5

android-workmanager ×2

c++ ×1

enums ×1

jodatime ×1

jsr310 ×1

proguard ×1