我是 android 开发的新手——使用 Titanium 开发我的第一个 Android 应用程序。
我遇到了一个问题,我的应用程序不断超时,但我不知道为什么。我觉得我的方法/理解 Titanium 和 android 的工作方式存在根本性错误,但我还没有弄清楚。
我的应用本质上是一个书签工具,类似于安卓的delicious。它:
- 挂钩到 SEND 意图,以捕获来自其他应用程序的共享意图
- 从 SEND 意图中获取主题和文本,并进行一些处理以解析出 URL 和标题
- 将这些数据传递到网页
代码如下:
在 中/platform/android/AndroidManifest.xml
,我添加了一个意图过滤器来捕获 SEND 操作:
<activity android:name=".Advocateio2Activity"
android:label="Advocate.io"
android:configChanges="keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
在 中/Resources/app.js
,我检查发送意图、处理并打开一个特殊的 URL:
(function() {
var baseUrl = "http://mydomain.com/bookmarklet";
var intent = Ti.Android.currentActivity.getIntent();
var win = Ti.UI.createWindow({
backgroundColor: '#000',
fullscreen: false,
exitOnClose: true,
layout: "vertical"
});
if (intent.hasExtra(Ti.Android.EXTRA_TEXT)) {
win.open();
var title = intent.getStringExtra(Ti.Android.EXTRA_SUBJECT);
var body = intent.getStringExtra(Ti.Android.EXTRA_TEXT).replace(/\n/g, " ");
var parts = body.split(" ");
for (var i=0; i<parts.length; i++) {
if (parts[i].search(/htt*/) == 0) {
// this is a URL
var url = parts[i];
var bookmarklet_url = baseUrl + '?url=' + encodeURIComponent(url) + '&title=' + encodeURIComponent(title) + '&mobile=1';
}
}
if (bookmarklet_url) {
Ti.Platform.openURL(bookmarklet_url);
}
win.close();
}
})();
这基本上是整个应用程序。很简单的想法。
当我直接调试和安装(通过 Titanium Studio)时,它工作正常,但是当我发布到 Play 商店时,应用程序每次都会崩溃。
该应用程序在处理发送意图时挂起(在我从“共享”菜单中选择了我的应用程序之后)——只是提供了一个黑屏。如果我运行调试会话,我会看到正在发生的Activity idle timeout for ActivityRecord
事情,但我不确定为什么。
我的猜测是,我只是不知道流在 android 应用程序中是如何工作的,而且我正在泄漏内存、产生无限循环,或者没有正确管理我的应用程序视图/窗口。
无论如何,我完全被困住了——现在已经调试了一个多星期,但我无法获得一致的结果。
任何帮助将不胜感激。
谢谢!!