我正面临一个问题:
我的登录任务在第一次运行中需要一段时间...大约30-60秒...
这是我现在无法解决的性能问题,因此我正在尝试最好的方法...因为90%的用户不会等待60秒,而是看着屏幕观看进度栏负载,因此login
是我提供服务的一种方法,该方法在后台运行,因此用户可以转到其他任何应用程序,但仍然可以。
该服务是在Application
onCreate
期间创建的,此过程可以正常工作...
问题:
为了节省用户时间,首次成功登录后,我会缓存一些身份验证数据,并且当用户下次使用该应用程序时,登录表单已经填写完毕,因此如果他走得很快并单击登录,则android系统不会尚未创建MyService,并且调用MyService.login(params)
会引发nullpointer
由于我无法控制android在应用程序oncreate
期间创建活动/服务的顺序,有没有比简单地放一个带有新线程的线程来等待服务就绪的方法更好的解决此问题的方法?
==========更新========
只是为了让事情澄清
public class App extends MultiDexApplication{
//many stuff
public void onCreate(){
Intent intent = new Intent(this, MyService.class);
startService(intent);
//many other stuff
}
}
public class LoginActivity extends AppCompatActivity{
protected void onCreate(Bundle savedInstanceState) {
//try to recover auth data from cache
Auth a = getCachedAuth();
if(a !=null)
MyService.getInstance().login(a);
//else wait for user input auth data
}
}
MyService.getInstance()
将是null
,直到android系统从我给出的意图中实例化它为止。
但是正如我所说,我无法控制android决定运行其任务的顺序...所以,有时服务会首先实例化,有时活动是...如何处理?