我可以在活动暂停时更新UI /视图(例如更改文本视图文本),例如,因为已启动另一个活动吗?
通过将活动与事件总线连接,我已经实现了一个像这样做的小测试应用程序.
活动A有一个TextView.活动A将自身注册到onCreate()中的EventBus,并在onDestroy()中取消注册.活动A启动活动B.活动B执行一些更改并触发ChangedEvent.活动A将接收此ChangedEvent,因为即使活动A暂停,它仍然会注册,并将更新活动A的TextView(更改文本).
一切正常.我已经在各种Android版本(2.3.3到4.3)上的各种nexus设备和仿真器上进行了测试.没有异常或意外行为.
那么可以肯定地说,我可以构建一个带有活动的应用程序,在活动暂停时更新他的视图吗?这取决于制造商等吗?我只能在股票Android设备上测试我的示例应用程序.
一个简单的问题:
我正在使用Eclipse 3.7 Indigo并更新了GWT(2.4)Eclipse插件.
现在我找不到主工具栏中的GWT编译按钮.
以前在主工具栏中有这个符号
,但更新后,此按钮已消失,编译操作已作为子菜单条目移动到"Google服务和开发工具"中,在此工具栏中由此符号表示
.
有没有办法将GWT编译按钮添加到主工具栏或指定快捷方式?
点击"Google服务和开发工具"进入编译子菜单条目真是太累了:-)
是否可以在没有OAuth的情况下使用新的Twitter Rest API进行搜索.
我只想搜索带有给定标签的推文.
例如我打电话:https: //api.twitter.com/1.1/search/tweets.json?%23MyTag
其中%23是编码的"#"
不过我总是得到
{"errors":[{"message":"Bad Authentication data","code":215}]}
Run Code Online (Sandbox Code Playgroud)
我猜它是因为我没有经过验证......
是否可以在没有OAuth的情况下运行搜索?
我只想用robolectric进行测试,看看片段中是否有某个视图可见.我的单元测试看起来像这样:
ActivityController controller = Robolectric.buildActivity(FragmentActivity.class);
FragmentActivity activity = (FragmentActivity) controller.create().start().resume().visible().get();
F fragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction()
.add(fragment, FRAGMENT_TAG).commit();
View view = fragment.getView().findViewById(R.id.my_view);
assertEquals(view.getVisibility(), View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)
我正在使用最新的android gradle插件1.1.3,robolectirc 2.4和robolectric gradle插件1.0.1,我的单元测试在test文件夹中(不是androidTest).我无法编译该代码,因为编译器无法解析R.java.
我的build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.1.3'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
classpath 'org.robolectric:robolectric-gradle-plugin:1.0.1'
}
}
apply plugin: 'com.android.library'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'org.robolectric'
android { ... }
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// Testing
testCompile 'org.robolectric:robolectric:2.4'
testCompile 'junit:junit:4.12'
// …Run Code Online (Sandbox Code Playgroud) android robolectric android-gradle-plugin robolectric-gradle-plugin
是context.getSystemService()一个昂贵的电话?
即我已经构建了一个小的http网络库(我知道还有其他可用的http网络库)ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);用于检查(在执行http请求之前)用户是否与互联网连接(一种快速失败策略).
我的问题是我应该保存ConnectivityManager我的http库的实例变量(类字段),还是应该ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);在每次启动http请求之前调用 以检索"新"连接管理器?每次调用时都返回相同的ConnectivityManager实例getSystemService(Context.CONNECTIVITY_SERVICE)(换句话说,可以将ConnectivityManger存储到类字段中导致问题,因为我的http库是一个很长的生存者 - >只要应用程序运行就会存在)
我想知道创建一个在一些Android活动和Android服务之间使用的Singleton是不是一个坏主意.据我所知,静态字段,在我的情况下,Singleton,只要整个Process处于活动状态就可用.
我的计划是使用单例而不是Parcelable在我的活动和后台服务之间共享数据.所以我的Activity1将通过调用MySingleton.getInstance()添加一些数据.addData(foo); 然后我会发送一个Intent来告知我的服务新单元已被添加到单例中.接下来,我的BackgroundService将处理intent并调用MySingleton.getInstance().getLatestData(); 然后它会处理数据(需要一些时间).接下来,通过使用单例并激发广播意图,该服务的结果将"后"回来,这些广告意图由Activity1处理(如果是活动的),并且Activity1将从单例中检索结果.
你们认为这是个坏主意吗?
编辑:我想要实现的是一个软件的和平,从Web服务器下载数据解析它并返回结果.所以我的Activity将创建DownloadJob对象.DownloadJob-Object将被放入DownloadScheduler(Singleton),它将所有DownloadJobs排队和管理.DownloadScheduler允许同时运行5个DownloadJobs并使用队列来存储等待.有效的下载将由DownloadService(IntentService)完成,它通过Intent通知现在应该执行(下载)新的DownloadJob.DowanlodService将从DownloadSchedulers队列(PriorityBlockingQueue)中检索下一个作业,并通过设置DownloadJob.setResult(...)返回结果并触发广播意图,结果已准备好,
因此,在我的场景中,我将使用单例从DownloadService访问DownloadJobs,而不是生成DownloadJob Parcelable并将其传递给Intent.所以我会避免这个问题,我在内存中有两个DownloadJobs(一个在"活动站点",一个在"服务站点").
任何建议如何更好地解决这个问题?
静态实例(例如DownloadScheduler(Singleton))是否会被低内存的android系统释放?那么将子类化应用程序并保持引用(非静态)避免这个问题?
我如何实现这样的事情:

我想在一个TextView中做到这一点.设置TextView的背景颜色不起作用.
我想它应该可以用spannable,但我不知道如何.
在HTML中我会这样做:
<html>
<body>
<span style="background:#CCCCCC;">first line <br /> second long line </span>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在Android上做到这一点.最后一个选项是将文本拆分为两个文本视图,并将每个textviews背景颜色和/ height设置为wrap_content.但由于单词的文本长度/数量可以是动态的,我需要计算每个单词的长度等.必须有更好的方法:)
我试图通过嵌入jetty开发Web服务器.所以对于jetty 7.3一切正常.昨天我将jetty库更新到最新版本8.0.3,现在我通过创建一个ServletContextHandler得到了一个Exception.
线程"main"中的异常java.lang.NoClassDefFoundError:org.eclipse.jetty.servlet.ServletContextHandler中的javax/servlet/FilterRegistration.(ServletContextHandler.java:126)org.eclipse.jetty.servlet.ServletContextHandler.(ServletContextHandler.java :106)在org.gemsjax.server.GemsJaxServer.main(GemsJaxServer.java:38)的org.eclipse.jetty.servlet.ServletContextHandler.(ServletContextHandler.java:94)
所以我做的是:
public static void main(String[] args) {
Server server = new Server(8080);
ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContext.setContextPath("/servlets");
servletContext.addServlet(new ServletHolder( new CollaborationWebSocketServlet()),"/collaboration");
// The ResourceHandler to handle static web content
ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setDirectoriesListed(true);
resourceHandler.setWelcomeFiles(new String[]{ "index.html" });
resourceHandler.setResourceBase("./war/");
ContextHandler resourceContext = new ContextHandler();
resourceContext.setContextPath("/static");
resourceContext.setHandler(resourceHandler);
HandlerCollection handlers = new HandlerCollection();
handlers.addHandler(resourceContext);
handlers.addHandler(servletContext);
server.setHandler(handlers);
try {
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
抛出异常的行是:
ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
Run Code Online (Sandbox Code Playgroud)
我使用ubuntu 11.04: …
是否可以检查用户是否已点击带有target ="_ blank"的html链接.
我想要做的是在我的应用程序中在WebView中显示htlm,但在android默认浏览器中启动"外部"链接."外部"链接对我来说是一个target ="_ blank"的链接.所有其他链接应在webview中处理.
例如:用户在我的WebView中点击这样的链接:
<a href="http://www.google.com" target="_blank">new window</a>
Run Code Online (Sandbox Code Playgroud)
然后我想在Android浏览器中打开给定的URL.
我用shouldOverrideUrlLoading()尝试了它,但此时我无法确定目标是"_blank"还是普通链接(没有目标).
我也试过setSupportMultipleWindows(true); 与onCreateWindow()结合使用,但在此回调中我无法获取url.
我无法更改显示的HTML,因此我无法使用带有addJavascriptInterface()的JavaScript Bridge
我还可以做些什么?还有其他想法吗?
我有一个关于android中的sqlite数据库的新手问题:
每次操作数据时,我是否真的需要检索可写数据库?
那么我可以像这样写一个DAO:
class Dao {
private final SQLiteDatabase database;
public Dao(SQLiteOpenHelper databaseHelper){
database = databaseHelper.getWritableDatabase();
}
public void insert(...){
ContentValues cv = new ContentValues(4);
database.insertOrThrow(TABLE, null, cv);
...
}
public void update(...){
ContentValues cv = new ContentValues(4);
database.update(....);
}
}
Run Code Online (Sandbox Code Playgroud)
或者我必须像这样写我的道:
class Dao {
private final SQLiteOpenHelper databaseHelper;
public Dao(SQLiteOpenHelper databaseHelper){
this.databaseHelper = databaseHelper
}
public void insert(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.insertOrThrow(TABLE, null, cv);
...
}
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase(); …Run Code Online (Sandbox Code Playgroud)