我一直在阅读一些有关Android内存泄漏的文章,并观看了Google I/O 关于此主题的有趣视频.
尽管如此,我还是不完全理解这个概念,特别是当在Activity中使用内部类是安全或危险的时候.
这就是我的理解:
如果内部类的实例比其外部类(活动)存活的时间更长,则会发生内存泄漏.- > 在哪种情况下会发生这种情况?
在这个例子中,我认为没有泄漏的风险,因为匿名类扩展没有办法OnClickListener比活动更长寿,对吧?
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_generic);
Button okButton = (Button) dialog.findViewById(R.id.dialog_button_ok);
TextView titleTv = (TextView) dialog.findViewById(R.id.dialog_generic_title);
// *** Handle button click
okButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
titleTv.setText("dialog title");
dialog.show();
Run Code Online (Sandbox Code Playgroud)
现在,这个例子是危险的,为什么?
// We are still inside an Activity
_handlerToDelayDroidMove = new Handler();
_handlerToDelayDroidMove.postDelayed(_droidPlayRunnable, 10000);
private Runnable _droidPlayRunnable = new Runnable() {
public void run() {
_someFieldOfTheActivity.performLongCalculation(); …Run Code Online (Sandbox Code Playgroud) 我已经看过了android.util.Log的文件,我不知道之间究竟有什么区别Log.e()和Log.wtf()是.一个比另一个更受欢迎吗?有功能差异吗?当然,他们并不多余.
未来读者请注意:在提出这个问题的时候,这方面的文件不太清楚.如果您按照上面的链接,他们已经解决了问题.
当我创建首选项活动时,我在xml文件中定义所有首选项.每个首选项都有一个在此xml中定义的键.但当我访问首选项时,我写道:
SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean foo_value = appPreferences.getBoolean("foo_key_defined_in_xml", false);
Run Code Online (Sandbox Code Playgroud)
有没有办法避免以硬编码的方式引用"foo_key_defined_in_xml"?也许有可能以R风格的方式引用它(不是指字符串)?
指针的大小是否与其指向的类型的大小相同,或者指针总是具有固定大小?例如...
int x = 10;
int * xPtr = &x;
char y = 'a';
char * yPtr = &y;
std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";
Run Code Online (Sandbox Code Playgroud)
这会是什么输出?会sizeof(xPtr)返回4并sizeof(yPtr)返回1,或者2指针实际上会返回相同的大小吗?我问这个的原因是因为指针存储的是存储器地址而不是它们各自存储的地址的值.
我的问题是,当我启动应用程序并且用户没有打开我的PreferenceActivity时候,当我检索它们时,不会获得我的preference.xml文件中定义的任何默认值.
preference.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="applicationPreference" android:title="@string/config"
>
<ListPreference
android:key="pref1"
android:defaultValue="default"
android:title="Title"
android:summary="Summary"
android:entries="@array/entry_names"
android:entryValues="@array/entry_values"
android:dialogTitle="@string/dialog_title"
/>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
我的主要活动(onCreate方法)的片段:
SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String pref1 = appPreferences.getString("pref1", null);
Run Code Online (Sandbox Code Playgroud)
结果我得到了一个null值.
我试图将套接字绑定到下面的端口:
if( bind(socket_desc,(struct sockaddr *) &server, sizeof(server)) < 0)
{
perror("bind failed. Error");
return 1;
}
puts("bind done");
Run Code Online (Sandbox Code Playgroud)
但它给出了:
$ ./serve
Socket created
bind failed. Error: Address already in use
Run Code Online (Sandbox Code Playgroud)
为什么会出现此错误?
我正在通过扩展DialogPreference类在Android中编写一些自定义首选项对话框.但是,我对这需要的锅炉板代码量有点担心,因为似乎有很多行为需要测试.
例如,一些偏好对话框的这个例子是相当典型: http://svn.jimblackler.net/jimblackler/trunk/workspace/NewsWidget/src/net/jimblackler/newswidget/NumberPreference.java
特别是,onSave()/ RestoreInstanceState()methods和"类SavedState"部分是必需的,以便在方向更改时保留对话框的当前更改是非常冗长和复杂的.
有没有人有更简洁的方式编写DialogPreference类的技巧?
我来回让我的网站上的用户改变他们的用户名,这将通过网站显示.一方面,我想给用户灵活性.但另一方面,我不希望他们使用此功能作为一种隐藏方式,如果他们在网站上做了不需要的事情.我知道SO和Twitter可以让你改变你的显示名称.是什么让某人在网站上表现不好,然后更改他们的名字,以便他们可以继续表现不好?
我需要反馈专业人士和骗子.谢谢!
更新: 清理一下.我没有使用用户名作为主要内部帐户ID.每个用户都有一个唯一的号码.我的问题并不是我的系统跟踪用户关于其他用户如何能够互相跟踪的系统.
如果userA知道userB正在做坏事,那么userB将他的名字改为userC.然后userA将不再知道他是谁.
如何获得XML中定义的Android首选项的默认值?我不想在代码和首选项XML中重复默认值的定义.
Linux文件/ proc/net/dev读取如下:
[me@host ~]$ cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
Run Code Online (Sandbox Code Playgroud)
字段下降和错误是什么意思?
一些ERRS包也算在下降包?
为什么数据包被认为是错误的,是因为它遭受校验和错误?
为什么丢包?是因为系统没有足够的缓冲区,因为NIC上有一些突发?
难道这两个领域采取发往另一个主机的数据包(例如,当网卡处于混杂模式下工作)为考虑的?