小编Spi*_*ner的帖子

永远不会启动Android服务 - 未调用onStartCommand()

我正在尝试创建一个将在后台处理文件I/O的服务.更新数据的活动将绑定到服务并调用服务的方法来执行I/O. 我正在使用Android文档获取指导.

但是,我的服务似乎并不想开始.在我的Activity的onCreate()方法中,我有:

Intent smsIntent = new Intent(this, SurveyManagerService.class);    
String surveyFilename = getIntent().getStringExtra("surveyFilename");   
System.out.println(startService(smsIntent)); //testing if it starts
SurveyManagerServiceConnection connection = new SurveyManagerServiceConnection();
sms = connection.getSurveyManagerService();
Run Code Online (Sandbox Code Playgroud)

在第3行,LogCat输出一个ComponentInfo对象,因此看起来服务已经创建; 但是,短信是空的.此外,似乎永远不会调用SurveyManagerService onStartCommand()方法:

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    System.out.println("starting service");
    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
    openSurveyFromIntent(intent);
    return START_REDELIVER_INTENT;
}
Run Code Online (Sandbox Code Playgroud)

我从未在LogCat中看到任何"启动服务"输出,也没有看到Toast.

我的服务在我的清单中声明为:

<service android:name=".SurveyManagerService" android:exported="false" android:enabled="true">
</service>
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗 让我知道我应该提供哪些其他信息来诊断问题.

service android android-service

16
推荐指数
3
解决办法
2万
查看次数

通过引用将对象从一个Activity传递到下一个Activity是否可能,以及最佳策略是什么?

我有一个简单的Android应用程序,它使用类的实例,让我们调用它DataManager,以类似Façade的方式管理对域类的访问.我最初设计它是一个单独的,可以使用静态方法检索,但我最终对我的实现的混乱感到恼火,并重构为我认为是一个更简单和更清洁的想法.

现在的想法是,对于每个打开的文件,DataManager创建一个文件,它们处理文件I/O和域类的修改(例如Book).当开始一个新的活动,我通过这个实例作为一个Serializable额外的(我还没有到使用Parcelable还,但预计我会当我有基本的概念工作),然后我抓住了DataManagerIntentonCreate()的方法新活动.

然而,对象的比较表明从一个活动发送的对象与从Bundle第二个活动中检索的对象不同(不同的引用).阅读Bundle(在StackOverflow等上)表明Bundles除了传值之外不能做任何其他事情.

那么什么可能是在活动之间传递对象最干净,最安全的策略?我能看到它

  1. 忘记通过引用传递并与每个Activity拥有自己的DataManager对象一起生活.DataManager每次关闭活动时都会传回新的活动,以便底层活动可以使用它.(我认为这是一个简单的解决方案.)

  2. 回到使用单例DataManager并使用静态方法从每个单独获取它Activity.(不再热衷于使用单身人士.)

  3. 扩展应用程序以创建一种全局引用DataManager.(再次,不热衷于全局变量的想法.)

这是一个公平的总结吗?我可以使用其他一些健康的策略吗?

java android reference android-activity

5
推荐指数
1
解决办法
252
查看次数

屏幕方向更改后返回“活动”时丢失对Android服务的引用

我有一个Activity开始并绑定到的Service。然后Activity,我从另一个启动另一个。Activity从第二个返回第一个后,我需要调用Service(保存一些数据)的方法。

在查看每种屏幕时,只要退出之前我返回相同的屏幕方向Activity,我的Activity生命周期方法似乎就足以应对屏幕方向的更改Activity

当我以离开我的方向不同的方式返回到第一个活动时,就会发生问题。如果发生这种情况,我将失去对自己的引用Service,因此会遇到NullPointerExceptionin onActivityResult()。因此,如果我Activity在人像模式下启动第二个,在查看第二个时切换到风景,而在风景模式下Activity返回第一个Activity,则会崩溃。

我可能会缺少什么?我不想使用清单文件来表示我将处理配置更改-使我感到有些丑陋,无法解决主要问题。除非我再次错过任何东西...

以下是我第一个练习中生命周期方法的摘录:

@Override
protected void onStart()
{
super.onStart();

// start and bind to service
startService(smsIntent);
connection = new SMServiceConnection();
bindService(smsIntent, connection, Context.BIND_AUTO_CREATE);

}

@Override
protected void onRestart()
{
super.onRestart();
}

@Override
protected void onResume()
{
super.onResume();
}

@Override
protected void onPause()
{
super.onPause();
sms.save(); // autosave
}

@Override
protected …
Run Code Online (Sandbox Code Playgroud)

android screen-orientation android-service android-activity

5
推荐指数
1
解决办法
1792
查看次数