我最近编写了我的第一个Android应用程序,大约有8,000-10,000行代码.连续阻碍我使用正常设计模式的一件事是android大量使用异步调用(打开对话框,活动等).因此,我的代码很快开始看起来像"意大利面条",我最终开始不喜欢看某些类.
有没有特定的设计模式或编程方法适用于任何人都会推荐的系统?有没有关于编写可管理的异步代码的建议?
我的问题如下:
何时是程序中指定的共享对象的地址?链接期间?数据加载中?如果我想在程序system内部找到命令的内存地址,libc我可以很容易地找到它gdb,但是如果我不想将程序带入调试器呢?
这个地址可以从一次运行变为运行吗?是否还有其他静态分析工具可以查看运行时将库或函数加载到该程序的内存空间的位置?
编辑:我想在程序之外的这些信息(即使用实用程序,如objdump收集信息)
我正在编写一个实用程序,它接受文件名或从stdin读取.
我想知道检查stdin是否存在的最强大/最快的方式(数据是否通过管道传输到程序),如果是,则读取该数据.如果不存在,则处理将在文件名上进行给出.我已经尝试使用以下测试的大小,stdin但我相信,因为它是一个流而不是一个实际的文件,它不起作用,因为我怀疑它会,它总是打印-1.我知道我总是可以一次读取输入1个字符!= EOF但是我想要一个更通用的解决方案,所以如果stdin存在我最终会得到fd或FILE*所以程序的其余部分将无缝运行.我希望能够知道它的大小,等待前一个程序关闭流.
long getSizeOfInput(FILE *input){
long retvalue = 0;
fseek(input, 0L, SEEK_END);
retvalue = ftell(input);
fseek(input, 0L, SEEK_SET);
return retvalue;
}
int main(int argc, char **argv) {
printf("Size of stdin: %ld\n", getSizeOfInput(stdin));
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
终奌站:
$ echo "hi!" | myprog
Size of stdin: -1
Run Code Online (Sandbox Code Playgroud) 我试图ssh-keygen使用变量通过bash输入而不是文件来获取公钥的指纹.我知道我可以使用临时文件来解决这个问题,但由于这个问题的范围之外的原因,我不想这样做.
这个方法并没有因为它说,关键文件是无效的工作(这是正确的肯定)
echo $pubkey | ssh-keygen -lf /dev/stdin
Run Code Online (Sandbox Code Playgroud)
这确实有效,但不使用变量,而是使用文件.
ssh-keygen -lf alpha.pub
Run Code Online (Sandbox Code Playgroud)
这确实有效,但不使用变量,而是使用重定向文件.
ssh-keygen -lf /dev/stdin < alpha.pub
Run Code Online (Sandbox Code Playgroud)
这并没有工作,因为我得到一个模棱两可的重定向
ssh-keygen -lf /dev/stdin < $(echo $pubkey)
Run Code Online (Sandbox Code Playgroud)
我希望得到一些有识之士为如何获得SSH-凯基从与公钥的变量,如果可能的话,一个解释,为什么重定向没有做什么,我认为他们应该做阅读.具体来说,为什么|行为<与第三个例子的原因不同ambiguous redirect.我在线搜索,但许多重定向教程似乎没有回答我的问题.
我在理解Hibernate如何处理泛型方面遇到了一些麻烦,并且想知道实现目标的最佳方法.
给出一个简单的通用实体:
@Entity
public class Box<T>{
private T t;
@Id
private long id;
public void setT(T t) {
this.t = t;
}
public T getT() {
return t;
}
public void setId(long id) {
this.id = id;
}
public long getId() {
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
在进行hibernate初始化时,我得到了异常: ...has an unbound type and no explicit target entity. Resolve this Generic usage issue or set an explicit target attribute (eg @OneToMany(target=) or use an explicit @Type
我几乎可以肯定这是因为我没有给hibernate一个<T>实际上可以限制的列表.我知道你可以在注释中指定targetEntity=String.class上面t …
我试图sed在二进制文件中进行替换,但我开始相信这是不可能的.基本上我想做的是类似于以下内容:
sed -bi "s/\(\xFF\xD8[[:xdigit:]]\{1,\}\xFF\xD9\)/\1/" file.jpg
Run Code Online (Sandbox Code Playgroud)
我希望实现的逻辑是:扫描二进制文件直到十六进制代码FFD8,继续读取直到FFD9,并且只保存它们之间的内容(丢弃之前和之后的垃圾,但包括FFD8并FFD9作为文件的保存部分)
有没有办法做到这一点?即使不使用sed?
编辑: 我只是在玩,并找到了最干净的方式去做IMO.我知道这个grep声明会贪婪.
hexdump -ve '1/1 "%.2x"' dirty.jpg | grep -o "ffd8.*ffd9" | xxd -r -p > clean.jpg
Run Code Online (Sandbox Code Playgroud) 我试图将正则表达式结果分配给bash脚本中的数组,但我不确定这是否可行,或者我是否完全错误.以下是我想要发生的事情,但我知道我的语法不正确:
indexes[4]=$(echo b5f1e7bfc2439c621353d1ce0629fb8b | grep -o '[a-f0-9]\{8\}')
Run Code Online (Sandbox Code Playgroud)
这样:
index[1]=b5f1e7bf
index[2]=c2439c62
index[3]=1353d1ce
index[4]=0629fb8b
Run Code Online (Sandbox Code Playgroud)
任何链接或建议都会很精彩:)
我有两个类设置,如下所示.我很困惑,当我需要注释作为外国收藏品的东西,当我不需要.这也可能听起来很愚蠢,但在ORMLite文档中没有说明是否允许非外国收藏.如果我有一个int自动装入Integers 的列表怎么办?我可以坚持使用@DatabaseField上面的标准Collection吗?ORMLite据说,一个外国收藏品也必须有后备参考才能发挥作用(对父母的一个参考,给出一对多的实际情况).对于下面的示例,我假设您应该注释myBList为外部集合以及创建myA外部对象,但是您如何处理myStringList?
我在这里看过示例代码,但它没有回答我的问题:http://ormlite.com/docs/examples
public class A {
private Set<B> myBList = new HashSet<B>();
private List<String> myStringList = new ArrayList<String>();
private long id;
public A(){}
public Set<B> getMyBList() {
return myBList;
}
public void setMyBList(Set<B> myBList) {
this.myBList = myBList;
}
public List<String> getMyStringList() {
return myStringList;
}
public void setMyStringList(List<String> myStringList) {
this.myStringList = myStringList;
}
public void setId(long …Run Code Online (Sandbox Code Playgroud) 我有一个简单的android项目,我试图在Eclipse内调试.当我在调试模式下运行并使用"Step Over"按钮时,它似乎经常想要进入Android代码(我不希望它这样做,就像C调试器不会进入libc一样).我得到一个看起来类似于的屏幕:
Class File Editor
Source not found:
The JAR file blahblah/android.jar has no source attachment.
You can attach the source by clicking attach source
Run Code Online (Sandbox Code Playgroud)
我根本不希望它进入Android或Dalvik代码(即使我可以安装源代码)我只对自己的个人代码感兴趣.
在处理AsyncTasks和屏幕旋转时,我仍然试图找到"正确的"设计模式.我读了这篇链接到这段代码的commonsware博文,但现在不推荐使用onRetainNonConfigurationInstance方法.文档中的神奇句子指出"在切换到下一个活动期间没有消息处理的保证简化了对活动对象的使用......"这是关于这个方法做了什么的真正关键部分.我没有看到使用setRetainInstance()能够实现相同目标的建议.
我也看到了这样的帖子,其中第一个答案实际上是一个糟糕的黑客,只覆盖了90%的用例(即如果你的任务正在运行然后打个电话会发生什么,该解决方案不会工作).
有人建议在这里查看AsyncTask示例的代码,但除非我是密集的,否则我看不到它们在应用程序的任何地方使用(在谷歌代码上使用搜索功能时)
这个问题显然已被多次询问,但我没有看到最新的,适当的asnwer.如果存在,请回答并关闭,如果必须,但至少回答!:)
这是另一个链接,它检查相同的,已弃用的方法.