我正在使用内置的OS X VPN工具连接到我公司的网络.我注意到,当我连接时,所有流量都通过VPN.
在过去,当我使用Windows VPN工具时,我能够对其进行配置,使得只有到某些IP范围和/或主机名的流量通过VPN传输,其他所有内容都通过本地网络传输.
这是否可以使用默认的OS X VPN?我在设置中没有看到任何内容......
在我的活动中,我经常使用这个成语:
@Override
public void onDestroy() {
super.onDestroy();
if (isFinishing() != true) return;
// do some final cleanup since we're going away for good
}
Run Code Online (Sandbox Code Playgroud)
片段有一个onDestroy()方法,但相当于isFinishing()什么?我应该getActivity().isFinishing()从片段中检查一下onDestroy()吗?
编辑添加:
以下是我在各种情况下得到的回调(按顺序),以及getActivity()返回null或非null,如果非null,则返回值getActivity().isFinishing():
场景#1: DialogFragment正在显示并且用户点击后退按钮(即需要释放引用):
onDismiss(): activity = non-null, finishing = false
onDestroy(): activity = non-null, finishing = false
Run Code Online (Sandbox Code Playgroud)
场景#2: DialogFragment正在显示并且父活动完成(即需要发布引用):
onDestroy(): activity = non-null, finishing = true
onDismiss(): activity = null, finishing = n/a
Run Code Online (Sandbox Code Playgroud)
场景#3: DialogFragment正在显示并且OS暂时销毁父活动(即不应该释放引用):
onDestroy(): activity = non-null, …Run Code Online (Sandbox Code Playgroud) android android-lifecycle android-fragments android-activity
公司创建项目并接收发件人ID.公司创建一个应用程序,烘焙其发件人ID并将应用程序放在商店中.
攻击者对应用程序进行反向工程,并提取发件人ID和用于接收GCM注册ID的服务器接口.
攻击者创建自己的应用程序,烘焙公司的发件人ID和服务器注册界面,将应用程序放入商店.就GCM而言,攻击应用程序基本上冒充公司的真实应用程序:它注册接收来自公司发件人ID的邮件,然后将其GCM注册ID发送到公司的服务器,就像"真正的"应用程序一样.
现在,公司希望向其应用的所有实例广播一些信息.也许这是一个提醒,而不是更新可用.有没有办法区分"攻击应用程序"(注册就像真正的应用程序)与公司应用程序的"真实"版本?
来自GCM 文档:
更新应用程序时,它应使其现有注册ID无效,因为不能保证它与新版本一起使用.由于在更新应用程序时没有调用生命周期方法,因此实现此验证的最佳方法是在存储注册ID时存储当前应用程序版本.然后,在启动应用程序时,将存储的值与当前的应用程序版本进行比较.如果它们不匹配,则使存储的数据无效并再次开始注册过程.
当文档声明"它不能保证与新版本一起使用"是GCM的限制,还是他们推测我的应用程序从版本到版本的行为可能发生的变化?
从应用程序方面来说,我可以或多或少地保证连续版本在GCM和我编写的任何特定于应用程序的消息格式方面都能正常运行.我还需要重新注册吗?
如果是这样,我应该使用哪个来检测"新版本":版本代码或版本名称?我的理解是这些是"自由形式",应用程序开发人员将它们设置为他选择的任何值.那么,如果我在商店中添加应用更新但不更改versionName或versionCode,该怎么办?我需要重新注册GCM吗?
看起来GCM 实际想要的是每次第一次启动新安装时(以及每次连续启动直到注册完成),应用程序重新注册,无论versionName和versionCode中的值如何.这是一个准确的陈述吗?
关于娱乐状态的文档Activity:
默认情况下,系统使用Bundle实例状态来保存活动布局中每个View对象的信息(例如输入EditText对象的文本值).因此,如果您的活动实例被销毁并重新创建,则布局的状态将恢复到之前的状态,而您无需代码.
View.setTag(Object)状态的文档:
设置与此视图关联的标记.标记可用于标记其层次结构中的视图,并且不必在层次结构中是唯一的.标签还可用于在视图中存储数据,而无需借助其他数据结构.
我的问题是:如果我在我的活动布局中的View(具有唯一ID)上设置了一个标签,然后该活动被系统销毁并随后重新创建,那么该视图在重新创建时会自动标记为我最初设定的对象?
我在一个包含私钥的密钥链中有一个证书.我想将一个应用程序添加到该密钥的访问控制"白名单"中.我知道如何使用图形键链工具来做到这一点,但我想通过命令行作为Xcode构建脚本的一部分来完成.
从我所知道的"安全"命令是在命令行操作密钥链的方法,但我无法从手册页中弄清楚我将如何完成这项任务.
为了完整起见,这正是我在关键链工具中所做的,我想通过命令行做:
我可能也对如何允许访问所有应用程序感兴趣.
我的应用程序使用旧式选项菜单.目前我们的目标是API 9.在Galaxy S4上,我注意到以下行为:
此时,点击选项菜单中的任何元素(包括"更多")选项似乎没有任何效果. 然而,该系统实际上是缓存这些水龙头.如果用户点击菜单五次(没有可见效果),则点击后退按钮隐藏菜单,然后点击菜单按钮再次显示菜单,所有缓存的点击立即进行.每次用户点击该菜单项时,都会调用onOptionsMenuItemSelected()一次.
这只发生在S4(可能还有其他三星设备)上.值得注意的是,我没有看到使用Galaxy Nexus运行股票4.2.2的这种行为.
这是三星Android自定义的错误,还是我在我的应用程序中做错了什么,股票Android代码更宽容?
android android-menu galaxy android-optionsmenu samsung-mobile
我创建了一个简单的应用程序来说明在包含在SDK 17和SDK 18之间的RelativeLayout时LinearLayout行为的变化.首先,截图:
当targetSdkVersion为"17"时:

当targetSdkVersion为"18"时:

此活动的布局是:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00ffff"
android:orientation="vertical" >
<include layout="@layout/test_list_item"/>
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:overScrollMode="never"
android:scrollingCache="false" >
</ListView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
text_list_item.xml是:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff0000" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#ffff00"
android:padding="10dp"
android:text="foobar"
android:textColor="#000000" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignBottom="@id/text"
android:layout_alignTop="@id/text"
android:background="#00ff00"
android:orientation="horizontal"
android:weightSum="1.0" >
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:background="#0000ff" />
</LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
活动的onCreate()如下所示:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
findViewById(R.id.text).bringToFront();
final ListView mListView = (ListView) findViewById(R.id.listview);
mListView.setAdapter(new TestAdapter());
}
Run Code Online (Sandbox Code Playgroud)
TestAdapter看起来像这样:
public class TestAdapter …Run Code Online (Sandbox Code Playgroud) android android-layout android-listview android-linearlayout android-compatibility
我正在OS X上编写脚本,需要捕获SIGTERM以便在退出之前杀死一些子进程.为了这个问题,我把它归结为以下最小的例子,由于某种原因,它不能正常工作,因为我期望它:
#!/bin/sh
function shutdown()
{
touch foo.txt
exit 0
}
trap shutdown TERM
su -l myusername -c "sleep 9999"
Run Code Online (Sandbox Code Playgroud)
我在一个终端窗口中运行此脚本,然后切换到另一个,"ps -aef"产生这个:
502 857 645 0 11:38PM ttys001 0:00.00 /bin/sh ./foo.sh
0 858 857 0 11:38PM ttys001 0:00.02 su -l myusername -c sleep 9999
502 859 858 0 11:38PM ttys001 0:00.00 sleep 9999
Run Code Online (Sandbox Code Playgroud)
从那个第二个窗口开始,我发出"kill -15 857",但永远不会触发陷阱.脚本在"su"命令上仍然被阻止.
知道为什么吗?我觉得这很简单.
为什么下面的查询计划中包含表“events_201504”?根据我的查询和该表的检查约束,我希望查询规划器能够完全修剪它:
database=# \d events_201504
Table "public.events_201504"
Column | Type | Modifiers
---------------+-----------------------------+---------------------------------------------------------------
id | bigint | not null default nextval('events_id_seq'::regclass)
created_at | timestamp without time zone |
Indexes:
"events_201504_pkey" PRIMARY KEY, btree (id)
"events_201504_created_at" btree (created_at)
Check constraints:
"events_201504_created_at_check" CHECK (created_at >= '2015-04-01 00:00:00'::timestamp without time zone AND created_at <= '2015-04-30 23:59:59.999999'::timestamp without time zone)
Inherits: events
Run Code Online (Sandbox Code Playgroud)
时间及配置:
database=# select now();
now
-------------------------------
2015-05-25 16:49:20.037815-05
database=# show constraint_exclusion;
constraint_exclusion
----------------------
on
Run Code Online (Sandbox Code Playgroud)
查询计划:
database=# explain select count(1) from events where created_at …Run Code Online (Sandbox Code Playgroud) sql postgresql database-partitioning postgresql-performance postgresql-9.3
android ×6
macos ×2
security ×2
android-c2dm ×1
android-menu ×1
android-view ×1
bash ×1
command-line ×1
galaxy ×1
keychain ×1
networking ×1
postgresql ×1
process ×1
shell ×1
sql ×1
unix ×1
vpn ×1
xcode ×1