Eclipse连接到我的root电话,我可以运行调试会话并查看LogCat消息.我也可以Devices在DDMS透视图中看到手机,但是:当我打开File Explorer视图时(在相同的视角中)我什么也看不见.
我可以发誓,我看到它工作一次,但对于我的生活,我不记得是否有任何特殊的东西我必须预先配置在调试设备或Eclipse.
在与仿真器或设备的文件系统工作了Android开发者使用DDMS页面上说:
DDMS提供了"文件资源管理器"选项卡,允许您在设备上查看,复制和删除文件.此功能在检查应用程序创建的文件或者是否要与设备之间传输文件时非常有用.
要使用模拟器或设备的文件系统:
- 在"设备"选项卡中,选择要查看其文件系统的模拟器.
- 要从设备复制文件,请在"文件资源管理器"中找到该文件,然后单击"拉取文件"按钮.
- 要将文件复制到设备,请单击"文件资源管理器"选项卡上的"推送文件"按钮.
但是......这3个简单的步骤对我不起作用.我究竟做错了什么?
在Eclipse的文件资源管理器上查看我的root设备上的文件需要做什么?
adb pull有效,但我也希望能够使用文件资源管理器.到目前为止,我发现的所有用于更改活动标题栏颜色的解决方案(即通过activity.setTitle()和activity.setProgress()访问的解决方案)都要求FEATURE_CUSTOM_TITLE:
但我已经在使用FEATURE_PROGRESS和Android禁止将自定义标题与其他标题功能相结合(通过AndroidRuntimeException),我不想放弃那个很好的进度条,这是我活动中不可或缺的一部分.
关于在没有FEATURE_CUSTOM_TITLE的情况下更改活动标题栏颜色的唯一提示是在另一个SO线程中:
View titleView = getWindow().findViewById(android.R.id.titlebar);
if (titleView != null) {
ViewParent parent = titleView.getParent();
if (parent != null && (parent instanceof View)) {
View parentView = (View)parent;
parentView.setBackgroundColor(Color.RED);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试按原样使用代码,则android.R.id.titlebar无法解决!
我在哪里找到的android.R.id.titlebar?
我必须自己定义吗?(如果答案是肯定的,这本质上不是FEATURE_CUSTOM_TITLE吗?)
假设我的一个方法被传递了Bundle已经填充了要保存的数据,有没有办法将它保存到SharedPreferences 而不将它分成整数,浮点数,字符串等?
我更喜欢"一举"编写/提交所有内容的便利性,所以如果使用SharedPreferences无法做到这一点,你会推荐其他持久存储方法吗?
为了加快我的调试速度,我为某些消息着色以便即时发现,如下所示:
if (isOK)
Log.i(TAG, stringVarContentOfMessage);
else
Log.v(TAG, stringVarContentOfMessage);
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是一遍又一遍地查看这个源代码,其中占用4个宝贵行的唯一理由是仅一个不同的字符(Log.i vs. Log.v)对我来说是一个眼睛.
有什么建议可以避免这种情绪而不诉诸以下情况?
isOK ? Log.i(TAG, stringVarContentOfMessage) : Log.v(TAG, stringVarContentOfMessage);
Run Code Online (Sandbox Code Playgroud) Android开发人员参考列出了可用的内置View资源中的R.id.progress.
然而,当我发布(在我的活动类中)声明时:
View pv = getWindow().findViewById(android.R.id.progress);
Run Code Online (Sandbox Code Playgroud)
它返回null.
即使我将它与ProgressBar类一起使用它也会返回null :
ProgressBar pv = (ProgressBar) getWindow().findViewById(android.R.id.progress);
Run Code Online (Sandbox Code Playgroud)
即使没有getWindow(),它也会返回null :
ProgressBar pv = (ProgressBar) findViewById(android.R.id.progress);
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
为了确保我没有产生幻觉,我按照@ Geobits的建议从头开始创建了一个新项目,其中包含@ArunGeorge推荐的博客文章中列出的确切代码:
package com.droidworks;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ProgressBar;
public class ProgressBarExampleActivity extends Activity {
private ProgressBar mProgress;
private MyThread mBgThread;
private final Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mProgress = (ProgressBar) findViewById(android.R.id.progress);
mBgThread = (MyThread) …Run Code Online (Sandbox Code Playgroud) android android-titlebar android-progressbar android-resources
在我的onCreate()中,我设置了一个进度条,如下所示:
getWindow().requestFeature(Window.FEATURE_PROGRESS);
getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
Run Code Online (Sandbox Code Playgroud)
现在,希望稍微增强标题栏,我想改变它的背景颜色.第一步是检查是否FEATURE_CUSTOM_TITLE支持:
final boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
if ( customTitleSupported ) {
Log.i(TAG, "CUSTOM TITLE SUPPORTED!")
}
Run Code Online (Sandbox Code Playgroud)
但是一旦我打电话给requestWindowFeature(Window.FEATURE_CUSTOM_TITLE)我得到一个:
AndroidRuntimeException: You cannot combine custom titles with other title features
Run Code Online (Sandbox Code Playgroud)
(如果我在设置之前FEATURE_PROGRESS或之后调用此函数无关紧要)
知道如何解决这个问题吗?
或者,如果我能找到非自定义标题栏的资源ID,我会避免使用自定义标题栏.比危险的getParent()更好的东西.
这可能吗?
我使用以下代码片段来检查我finish()编辑的应用程序是否确实不再运行:
ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> procList = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo proc : procList)
Log.d(TAG, proc.processName);
}
Run Code Online (Sandbox Code Playgroud)
令我沮丧的是,我finish()编辑的一些应用程序(在他们的Activity.onCreate()中,甚至在他们有机会发布任何东西之前)仍然列在那里.
为什么?
LogCat显示这些应用程序onDestroy() 肯定被称为.
如何从该列表中真正删除应用程序?
是killProcess()我唯一的追索权吗?
在我维护的一些代码中,我注意到两种不同的方式来注册共享首选项更改侦听器:
(1)直接的方法,其中包含注册成员函数的类实现SharedPreferences.OnSharedPreferenceChangeListener.
preferences.registerOnSharedPreferenceChangeListener(mImageView);
Run Code Online (Sandbox Code Playgroud)
(2)间接方法,其中可能包含已注册成员函数的类,由于某种原因不喜欢实现SharedPreferences.OnSharedPreferenceChangeListener,而是选择定义和实例化仅专用于此侦听器的全新类:
SharedPreferences.OnSharedPreferenceChangeListener mPreferencesListener =
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
// do here what's needed to do
}
};
....
preferences.registerOnSharedPreferenceChangeListener(mPreferencesListener);
Run Code Online (Sandbox Code Playgroud)
两者都运作良好,但现在我想知道:一种方法优于另一种方法吗?
是否存在实际使用这两种方法中只有一种的情况?
出于测试目的,我需要从Visual Studio 手动终止命名线程(在调试会话中) - 或者允许我这样做的任何其他工具?
但是ThreadsVisual Studio 2010中的调试窗口在Freeze线程的上下文菜单中只有一个选项,而Sysinternal的ProcessExplorer只列出进程,而不是线程.
有没有办法手动杀死特定(正在运行)的线程?