小编Sco*_*ith的帖子

如何管理ViewGroup派生类中的生命周期?

我在一个活动中有一堆代码,显示一些外部数据的运行图.由于活动代码变得混乱,我决定提取此代码并创建一个GraphView类:

public class GraphView extends LinearLayout {
    public GraphView(Context context, AttributeSet attrs) {
        super(context, attrs);

        LayoutInflater inflater = (LayoutInflater)
                context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        inflater.inflate(R.layout.graph_view, this, true);
    }

    public void start() {
        // Perform initialization (bindings, timers, etc) here
    }

    public void stop() {
        // Unbind, destroy timers, yadda yadda
    }
        .
        .
        .
}
Run Code Online (Sandbox Code Playgroud)

把东西搬进这个新来的LinearLayout课很简单.但是有一些生命周期管理代码与创建和销毁此图所使用的计时器和事件监听器相关联(例如,如果活动暂停,我不希望在后台轮询这个事物).

从微软Windows背景的人,我有点希望找到重写onCreate()onDestroy()方法或类似的东西,但我还没有找到那种在的LinearLayout(或任何其继承成员)的任何东西.必须将所有这些初始化代码留在Activity中,然后必须将其传递到视图中,这似乎打败了将所有这些代码封装到可重用视图中的最初目的.

我最终在我的视图中添加了两个额外的公共方法:start()stop().我分别从活动onResume()onPause()方法中调用这些调用.

这似乎有效,但感觉就像我在这里使用胶带.有谁知道这通常是怎么做的?我觉得我错过了什么......

android

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

制作一个基本(非指针)参数const是否有意义?

我最近与另一位C++开发人员就以下用途进行了交流const:

void Foo(const int bar);
Run Code Online (Sandbox Code Playgroud)

他认为const以这种方式使用是很好的做法.

我认为它对函数的调用者没有任何作用(因为参数的副本将被传递,因此对于覆盖没有额外的安全保证).此外,这样做可以防止实现者Foo修改其参数的私有副本.因此,它既要求又要宣传实施细节.

不是世界末日,但肯定不是值得推荐的良好做法.

我很好奇别人对这个问题的看法.

编辑:

好吧,我没有意识到参数的常数没有考虑到函数的签名.因此,可以const在实现(.cpp)中标记参数,而不是在标题(.h)中标记- 并且编译器就可以了.既然如此,我想政策应该与制作局部变量const相同.

人们可以提出这样的论点:在标题和源文件中具有不同的看起来签名会使其他人感到困惑(因为它会使我感到困惑).虽然我试着用我写的任何内容来遵循最小惊讶原则,但我认为期望开发人员认为这是合法且有用的是合理的.

c++ const const-correctness

14
推荐指数
2
解决办法
1508
查看次数

Android:BitmapFactory.decodeResource返回null

我似乎无法弄清楚这一点.我有2个具有不同特征的java类,每个类调用BitmapFactory.decodeResource来获取相同的图像资源,一个返回位图而另一个返回null.两个类都在同一个包中.

这是有效的类,它调用BitmapFactory.decodeResource返回位图.我只包含相关代码.

package advoworks.test;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MainScreen extends SurfaceView implements SurfaceHolder.Callback {

    private static final String TAG = MainScreen.class.getSimpleName();

    public MainScreen(Context context) {
        super(context);

        Bitmap bitmap;
        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.droid_1);

        //adding the callback (this) to the surface holder to intercept events;
        getHolder().addCallback(this);

        // make the GamePanel focusable so it can handle events
        setFocusable(true);

    }
}
Run Code Online (Sandbox Code Playgroud)

这是不起作用的类.BitmapFactory.decodeResource在调试中返回NULL.我只包括我觉得相关的代码.

package advoworks.test;
import android.content.res.Resources;
import android.graphics.Bitmap; …
Run Code Online (Sandbox Code Playgroud)

graphics android bitmap android-context

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

istream vs内存映射文件?

我试图将文件映射到内存然后逐行解析 - istream我应该使用什么?

istream是否与在Windows上将文件映射到内存相同?我在寻找将文件映射到内存的完整示例时遇到了困难.

我见过人们链接来自MSDN的内存映射文章,但是如果有人可以推荐一个小的(~15行?)示例我会非常感激.

我一定在寻找错误的东西,但是当在Google上搜索"C++内存映射示例"时,我找不到包含迭代的示例.

这些是最接近的结果(只是让人们意识到我已经看过):

c++

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

内部接口*less*可访问内部受保护的构造函数?

我有一个接口和一个在同一个程序集中定义的抽象基类:

IFoo.cs:

internal interface IFoo { ... }
Run Code Online (Sandbox Code Playgroud)

Base.cs:

public abstract class Base
{
    internal protected Base(IFoo foo) { ... }
}
Run Code Online (Sandbox Code Playgroud)

这会生成以下编译器错误:

CS0051: Inconsistent accessibility: parameter type 'IFoo' is less
        accessible than method 'Base.Base(IFoo)'
Run Code Online (Sandbox Code Playgroud)

如果我将Base类构造函数设置为仅内部,则错误消失.由于该类是抽象的,可能在可访问性中添加受保护并不能完成任何事情......

不过,我不明白这个错误.MSDN将'protected internal'定义为

"访问仅限于当前程序集或从包含类派生的类型"

内部接口IFoo如何比内部受保护的构造函数更难访问?

c# protected internal

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

除非我引用项目,否则无法加载WinRT组件

我遇到了一个奇怪的问题.我创建了一个Windows运行时组件(用于Windows应用商店),它通过一些C#包装器类为.NET提供了一些旧的C/C++代码.

我编写了一个测试工具Store App(以下简称"test1"),它引用了WRC 项目(两个项目都在同一个解决方案中).它调用组件,一切正常.

接下来,我从WRC项目中获取以下输出文件:

MyWrtComponent.dll
MyWrtComponent.exp
MyWrtComponent.pdb
MyWrtComponent.pri
MyWrtComponent.winmd
Run Code Online (Sandbox Code Playgroud)

...并尝试从其他商店应用项目("test2")使用它们.在这个项目中,我添加了对.winmd文件的引用,而不是引用MyWrtComponent项目.一切都很好,但是当我运行test2应用程序时,只要我尝试使用MyWrtComponent中实现的一个C#类,我就会从mscorlib获得一个System.IO.FileNotFound异常:

at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
at MyWrtComponent.MyWrtClass..ctor()

The specified module could not be found.
(Exception from HRESULT: 0x8007007E)
Run Code Online (Sandbox Code Playgroud)

使用MyWrtComponent的release vs. debug构建没有任何区别.

在test2上运行ProcMon,我看到几次尝试加载vccorlib120_app.DLL(或者如果我正在构建调试时为vccorlib120d_app.DLL)的尝试失败:

QueryOpen   F:\test2\bin\Debug\AppX\vccorlib120d_app.DLL    NAME NOT FOUND
QueryOpen   F:\test2\bin\Debug\AppX\vccorlib120d_app.DLL    NAME NOT FOUND
CreateFile  C:\Windows\SysWOW64\vccorlib120d_app.DLL    NAME NOT FOUND
Run Code Online (Sandbox Code Playgroud)

我已经确认我的C:\ Windows\SysWOW64文件夹中不存在此文件.我不知道这是否与我的问题有关.

当我运行test1时,搜索不同的位置,找到该文件:

QueryOpen   F:\test1\bin\Debug\AppX\vccorlib120d_app.DLL    NAME NOT FOUND
CreateFile  C:\Program Files\WindowsApps\Microsoft.VCLibs.120.00.Debug_12.0.20827.3_x86__8wekyb3d8bbwe\vccorlib120d_app.dll SUCCESS
Run Code Online (Sandbox Code Playgroud)

我比较了两个测试项目的bin\Debug\AppxManifest.xml,并注意到一个重要的区别; test1有以下内容,test2没有:

<Dependencies>
  <PackageDependency Name="Microsoft.VCLibs.120.00.Debug" MinVersion="12.0.20827.3" />
</Dependencies>
Run Code Online (Sandbox Code Playgroud)

如果我将这三行添加到test2的生成输出并运行应用程序,它可以工作,但当然这不是一个真正的修复.

有谁知道这里发生了什么?MyWrtComponent是否具有以某种方式未被通信的依赖关系,或者我应该做什么来将vccorlib120d_app.DLL与我的运行时组件一起打包,或者......?

提前致谢.

c# visual-c++ windows-runtime windows-store-apps windows-8.1

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

是否可以将 DeskBand(或类似的)添加到 Win 10/11 中的通知区域?

我一直在研究如何让应用程序将自定义 DeskBand(或类似的东西)添加到 Windows 10 和 11 任务栏:

任务栏上的自定义区域

有各种关于 IDeskBand2 和其他任务栏扩展的参考,但我得到了相互矛盾的信息 [2],关于 DeskBand 是否只是被弃用,或者实际上不再受支持,例如,微软表示:

您应该在新开发中使用缩略图工具栏来代替桌面带,从 Windows 7 开始不支持桌面带。

...但缩略图工具栏要求您将鼠标悬停在任务栏按钮上才能看到它们。这与任务栏上始终可见的区域不同。

是否没有官方(非 hacky)方法来为 Windows 10/11 创建类似上面的“屏幕时间”示例的内容?

谁能阐明这一点?


[2]:以下是微软暗示 Windows 7 之后不支持的示例。

c# c++ winapi taskbar deskband

6
推荐指数
0
解决办法
970
查看次数

更好的估算下载时间的算法

可能重复:
估计/预测下载完成时间

我们都看到下载时间运行估计最初表示"7天"之类的事情,但是随着每次连续估计而不断下降(例如"23小时","45分钟","1分50秒"等)随着块的下载.

为了避免这些初始(警报)估计,有些技术可以尝试抑制前n个估计的显示,或等待估计之间的差值在开始显示之前降至某个阈值以下,但这些似乎不是一般,稳健的解决方案 有一些涉及太少样本的角落案例,或实际上变化很大的样本......

我想我回忆起数学(统计学)这类事物的一般解决方案,它可以减少或消除这些疯狂的价值观.

有人知道吗?

编辑:

好的,看起来这已经被问到并回答了:

algorithm math statistics

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

在服务器和客户端应用程序中通过套接字发送和接收JSON

我想通过C语言编写的服务器-客户端应用程序中的套接字通过JSON发送数据。

我正在使用json-c / libjson库在C应用程序中处理JSON数据。

通过研究一些教程,我能够创建JSON对象并能够成功解析它。

现在,我想使用JSON数据格式进行服务器-客户端的通信。

这是我的服务器和客户端代码的一部分

服务器

int main()
{
   int listenfd = 0, connfd = 0;    //related with the server
   struct sockaddr_in serv_addr;

   //json_object * jobj;
   uint8_t buf[158], i;

   memset(&buf, '0', sizeof(buf));
   listenfd = socket(AF_INET, SOCK_STREAM, 0);

   serv_addr.sin_family = AF_INET;
   serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
   serv_addr.sin_port = htons(8888); 

   bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
   printf("binding\n");

   listen(listenfd, 5);
   printf("listening\n");
   connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);

   printf("Reading from client\n");

   while ( (read(connfd, buf, 157)) > 0 )
   {
      for ( i = …
Run Code Online (Sandbox Code Playgroud)

c sockets json

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

JetPack:“ Gradle同步失败:已经处理!”

我已经在Debian 9.0 Stretch桌面上使用Android Studio 3.1.x一段时间了,没有任何问题。

我最近安装了Android Studio 3.2 Canary 14(又名JetPack)。按照JetPack 的入门指南,我创建一个带有Kotlin支持的新项目,然后选择Activity&Fragment + ViewModel

当我尝试同步新创建的项目(即使用Gradle Files同步项目)时,同步失败

查看日志,发现断言失败(如下所示):

2018-05-12 16:44:59,062 [ thread 43]   WARN - ea.IdeaSyncPopulateProjectTask - Sync failed: Already disposed! 
    java.lang.RuntimeException: java.lang.AssertionError: Already disposed!
        at com.intellij.openapi.application.impl.LaterInvocator.invokeAndWait(LaterInvocator.java:179)
        at com.intellij.openapi.application.impl.ApplicationImpl.invokeAndWait(ApplicationImpl.java:651)
        at com.intellij.openapi.application.impl.ApplicationImpl.invokeAndWait(ApplicationImpl.java:656)
        at com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil.executeOnEdt(ExternalSystemApiUtil.java:480)
        at com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil.executeProjectChangeAction(ExternalSystemApiUtil.java:469)
        at com.intellij.openapi.externalSystem.service.project.manage.ProjectDataManagerImpl.dispose(ProjectDataManagerImpl.java:442)
        at com.intellij.openapi.externalSystem.service.project.manage.ProjectDataManagerImpl.importData(ProjectDataManagerImpl.java:163)
        at com.intellij.openapi.externalSystem.service.project.manage.ProjectDataManagerImpl.importData(ProjectDataManagerImpl.java:221)
        at com.intellij.openapi.externalSystem.service.project.manage.ProjectDataManagerImpl.importData(ProjectDataManagerImpl.java:228)
        at com.android.tools.idea.gradle.project.sync.idea.IdeaSyncPopulateProjectTask.doPopulateProject(IdeaSyncPopulateProjectTask.java:120)
        at com.android.tools.idea.gradle.project.sync.idea.IdeaSyncPopulateProjectTask.populate(IdeaSyncPopulateProjectTask.java:97)
        at com.android.tools.idea.gradle.project.sync.idea.IdeaSyncPopulateProjectTask.access$000(IdeaSyncPopulateProjectTask.java:39)
        at com.android.tools.idea.gradle.project.sync.idea.IdeaSyncPopulateProjectTask$1.run(IdeaSyncPopulateProjectTask.java:86)
        at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:750)
        at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:157)
        at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:580)
        at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:525)
        at …
Run Code Online (Sandbox Code Playgroud)

android gradle kotlin android-studio android-jetpack

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