小编Roy*_*son的帖子

Kotlin Android - 创建使用上下文而没有内存泄漏的单例

我正在尝试实现以下单例模式: SingletonClass.getInstance(context).callMethod()

虽然有很多教程可以解释如何在Kotlin中制作单例,但它们都没有解决context在静态字段中持有一个会导致Android内存泄漏的事实.

如何在不创建内存泄漏的情况下创建上述模式?

更新:

这是我对CommonsWare解决方案#2的实现.我用过Koin.

单身人士课程:

class  NetworkUtils(val context: Context) {

}
Run Code Online (Sandbox Code Playgroud)

申请类别:

class MyApplication : Application() {

    val appModule = module {
        single { NetworkUtils(androidContext()) }
    }

    override fun onCreate() {
        super.onCreate()
        startKoin(this, listOf(appModule))
    }
}
Run Code Online (Sandbox Code Playgroud)

活动类:

class MainActivity : AppCompatActivity() {

    val networkUtils : NetworkUtils by inject()

}
Run Code Online (Sandbox Code Playgroud)

singleton android android-context kotlin

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

Android错误无法创建"assets"文件夹,因为它已存在

我正在按照本教程在我的Android应用程序中使用自定义字体:

该教程说要在app文件夹下创建一个assets文件夹但是当我尝试这样做时,我收到以下错误:"错误无法创建文件,已经存在"

但是,我查看了我的项目结构,我没有看到任何资产文件夹: 项目文件结构

android android-assets

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

为什么Xamarin调试版本如此之大,如何减小尺寸?

在Xamarin中使用Debug模式构建的简单"Hello World"程序的大小为50mb,甚至不包括已安装的Monoruntime和其他类似的东西.

虽然我猜测发布版本较小,但我还想减少调试版本的大小,而不会丢失任何调试功能,这样我就可以更快地重建我的应用程序.

那么,为什么Xamarin调试构建如此之大,如何在不牺牲调试功能的情况下减小它们的大小呢?

debugging xamarin

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

获取IOS自定义键盘的文本字段内的当前文本

我正在开发一个IOS自定义键盘.我想知道是否有办法获取文本字段内的当前文本以及它将如何工作.

例如,我们可以使用textDocumentProxy.hasText()查看文本字段是否包含文本,但我想知道文本字段内的确切字符串.

ios iphone-softkeyboard

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

如何将 bool 转换为 NSData

我发现这篇文章将 a 转换IntNSData

它说要这样做:

var foo: Int = 1000
let data = NSData(bytes: &foo, length: sizeof(Int))
Run Code Online (Sandbox Code Playgroud)

Bool我想知道,我是否应该对将 a 转换为同样的想法NSData,如下所示:

 var purchase: Bool = true
 let data = NSData(bytes: &purchase, length: sizeof(Bool))
Run Code Online (Sandbox Code Playgroud)

就我而言,我总是知道那Bool将是真实的。既然是这种情况,我想知道是否有一种更简单的方法将值“true”转换为对象NSData

一些背景上下文:

我将此值存储在这个库的NSData钥匙串中。

我还将把该NSData值转换回布尔值NSKeyedUnarchiver.unarchiveObjectWithData

nsdata ios nskeyedunarchiver swift

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

移除 AppBarLayout 周围的边框

我有一个看起来像这样的片段:

截屏

在屏幕底部(底部导航栏的正上方)彼此相邻的粉红色圆点和灰色圆点的正上方,有一条水平灰线。

无论如何我可以删除它吗?

该片段具有以下布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".home.tutorial.TutorialFragment">



<android.support.v4.view.ViewPager
    android:id="@+id/tutorialViewPager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toTopOf="@+id/appBar"
    android:background="@android:color/white"/>

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    app:layout_constraintTop_toBottomOf="@id/tutorialViewPager"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent">

    <me.relex.circleindicator.CircleIndicator
        android:id="@+id/circleIndicator"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        app:ci_drawable="@drawable/tab_indicator_selected"
        app:ci_drawable_unselected="@drawable/tab_indicator_default"
        app:ci_height="6dp"
        app:ci_width="6dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"/>


</android.support.design.widget.AppBarLayout>

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

我看了这篇文章:删除操作栏边框

但考虑到我不想从操作栏中删除边框,我认为它不适用。

android android-xml android-appbarlayout

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

为什么 useFetcher 会导致重新渲染无限循环?

我有一个输入。每次更改输入时,我都想调用 API。

这是代码的简化版本:

  // updated by input
  const [urlText, setUrlText] = useState("");

  const fetcher = useFetcher();

  useEffect(() => {
    if (urlText === "" || !fetcher) return;
    fetcher.load(`/api/preview?url=${urlText}`);
  }, [urlText]);
Run Code Online (Sandbox Code Playgroud)

问题是,当我放入urlText依赖项数组内部时,存在无限渲染循环,并且 React 声称问题是我可能正在更新useEffect. 然而,据我所知,我没有更新钩子内的任何状态,所以我不确定为什么会发生无限重新渲染。

有什么想法吗?

代码的完整版本是:

注意:如果没有去抖动,该错误仍然会发生,或者useMemo,所有这些东西基本上都是无关紧要的。

export default function () {
  const { code, higlightedCode } = useLoaderData<API>();

  const [urlText, setUrlText] = useState("");
  const url = useMemo(() => getURL(prefixWithHttps(urlText)), [urlText]);
  const debouncedUrl = useDebounce(url, 250);

  const fetcher = useFetcher();

  useEffect(() => {
    if …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs remix.run

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

如何在CUDA中使用%%globaltimer寄存器?

这个问题的答案建议使用%%globaltimer寄存器来测量 CUDA 内核中经过的时间。我决定尝试一下:

#define NS_PER_S 1000000000

__global__ void sleepKernel() {
    uint64_t start, end;
    uint64_t sleepTime = 5 * NS_PER_S;     // Sleep for 5 seconds

    if (threadIdx.x == 0) {
        // Record start time
        asm volatile("mov.u64 %0, %%globaltimer;" : "=l"(start));

        // Sleep for 5 seconds
        __nanosleep(sleepTime);

        // Record end time
        asm volatile("mov.u64 %0, %%globaltimer;" : "=l"(end));

        // Calculate and print the elapsed time in nanoseconds and milliseconds
        uint64_t elapsedNs = end - start;
        double elapsedMs = (double)elapsedNs / 1000000.0; …
Run Code Online (Sandbox Code Playgroud)

cuda

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

将动画 Drawable 保存为 GIF 文件?

我正在尝试使用 Android Commit Content API制作图像键盘。为了实现这一点,我需要能够在设备上存储.png文件.gif并从中创建文件对象。

目前,我正在使用 Glide 库从互联网上获取图像。我可能获取的示例图像是这样的。Glide 库为我提供了drawables包含动画 GIF 的库。我需要能够将这些可绘制对象编码为.gif可以在用户手机上保存为文件的文件。

我怎样才能做到这一点?

我查看了现有的帖子,例如:How to conversion a Drawable to a Bitmap? ,但它们没有帮助,因为该Bitmap对象无法存储动画 GIF。

这篇文章:将 gif 文件从可绘制文件保存到手机 SD 中?并在使用后将其从 SD 中删除似乎也相关,但是,它没有解释如何将动画Drawable对象转换为对象列表Bitmap

此外,它没有解释如何将一系列Bitmap对象保存为 1 个 GIF 文件。

java gif kotlin android-drawable android-glide

0
推荐指数
1
解决办法
1273
查看次数

如何避免 RxJava 中的嵌套回调?

我正在使用Android 的Reactive Network库。我是 RxJava 的绝对初学者,我正在努力解决它。我想做的是:

1]持续观察手机网络连接状态的变化

2]如果手机已连接到网络,请检查一次是否有互联网连接

为此,我在 Kotlin 中有以下代码:

    ReactiveNetwork.observeNetworkConnectivity(applicationContext)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe { connectivity ->
                if (connectivity.state == NetworkInfo.State.CONNECTED) {
                    ReactiveNetwork.checkInternetConnectivity()
                            .subscribeOn(Schedulers.io())
                            .observeOn(AndroidSchedulers.mainThread())
                            .subscribe { isConnectedToInternet ->
                                if (isConnectedToInternet) {
                                    Log.d("VED-APP", "Connected to Internet")
                                } else {
                                    Log.d("VED-APP", "Not Connected to Internet")
                                }
                            }
                } 
            }
Run Code Online (Sandbox Code Playgroud)

然而,这段代码很丑陋,而且非常嵌套。有没有办法清理这段代码?

尽管示例是 Kotlin 中的,但 Java 或 Kotlin 中的答案都会有所帮助。

android kotlin rx-java rx-java2

0
推荐指数
1
解决办法
365
查看次数

Javascript - 从对象列表中获取最大数量,每个对象都具有一个数字属性

我有一个对象列表,每个对象都有time一个整数属性(代码实际上是typescript,所以time实际上是类型number).

我想获得time列表中对象中的最高值.

这样做的简洁但可理解的方法是什么?我目前的方法如下,但看起来很笨重:

let times = []

for(let adventurer of adventurers) {
    times.push(adventurer.time)
}

Math.max(...times)
Run Code Online (Sandbox Code Playgroud)

javascript max typescript

0
推荐指数
1
解决办法
116
查看次数

slice[0:0] 在 Go 中有什么作用?

我最近在 Golang 降价解析器中看到了以下代码:

    blankLines := make([]lineStat, 0, 128)
    isBlank := false
    for { // process blocks separated by blank lines
        _, lines, ok := reader.SkipBlankLines()
        if !ok {
            return
        }
        lineNum, _ := reader.Position()
        if lines != 0 {
            blankLines = blankLines[0:0]
            l := len(pc.OpenedBlocks())
            for i := 0; i < l; i++ {
                blankLines = append(blankLines, lineStat{lineNum - 1, i, lines != 0})
            }
        }
Run Code Online (Sandbox Code Playgroud)

我对做什么感到困惑blankLines = blankLines[0:0]。这是一种预先添加到数组的方法吗?

go

0
推荐指数
1
解决办法
60
查看次数

C++使用atoi()转换单个字符而不是多个字符

我正在通过网络发送一条消息,其中包含以下简单代码:

SSL_write(ssl, argv[1], strlen(argv[1]));
Run Code Online (Sandbox Code Playgroud)

然后,我接收服务器上的消息并将消息的第一个字符转换为int,具有以下代码:

char buf[1024] = {0};
SSL_read(ssl, buf, sizeof(buf));
std::cout << atoi(&buf[0]);
Run Code Online (Sandbox Code Playgroud)

此代码工作得相当好,因为如果字符串类似于"1foo",服务器将打印出"1"到控制台.但是,如果字符串是"12foo",则服务器将打印出"12"而不是"1".

我该如何解决这个问题,所以服务器只打印出字符串的第一个字符(作为int)?

c++ string c++17

-1
推荐指数
1
解决办法
75
查看次数