AutoStart应用程序无法正常工作

我有一个简单的AutoStart应用与TimerTask实现,在几乎很多设备中工作正常。 问题是,它不是在Samsung Galaxy Y(2.3.6)DELL XCD35(2.2) 。 当设备引导TimerTask工作几秒钟,然后closures。 我检查了Application->Manage Application ,我看到Application->Manage Application已经在Force Stop状态。 这意味着一些如何我的应用程序几秒钟后停止。 那么,这两个设备中这种weird behaviour的原因是什么,如果任何人有解决scheme共享它。

以下是我的代码。

MyReceiver.java

 public class MyReceiver extends BroadcastReceiver{ private Timer mTimer = new Timer(); @Override public void onReceive(Context context, Intent arg1) { Toast.makeText(context, "Device Booted", Toast.LENGTH_LONG).show(); Log.d("TAG","Device Booted"); mTimer.scheduleAtFixedRate(new MyTimerTask(), 2000,2000); } private class MyTimerTask extends TimerTask { @Override public void run() { Log.d("TAG","TimerTask executed...."); } } } 

AndroidManifest.xml中

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.autostart.app" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name=".MyReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> </manifest> 

Solutions Collecting From Web of "AutoStart应用程序无法正常工作"

我会build议你使用AlarmManager而不是TimerTask,因为我遇到了你在许多设备中描述过的同样的问题。

  public void onReceive(Context context, Intent arg1) { Toast.makeText(context, "Device Booted", Toast.LENGTH_LONG).show(); Log.d("TAG","Device Booted"); AlarmManager AM =(AlarmManager)getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(); intent.setAction("ALARM_MANAGER_ACTION");//can add any string action here PendingIntent pi = PendingIntent.getBroadcast(mContext .getApplicationContext(), 0, intent,0); AM.set(AlarmManager.RTC,selectedTime, pi); AM.setRepeating(AM.RTC_WAKEUP, System.currentTimeMillis()+2000, 2000, pi); } public class MyReceiver1 extends BroadcastReceiver{ //event will come here private Timer mTimer = new Timer(); @Override public void onReceive(Context context, Intent arg1) { // check if event is same as you broadcasted through alarmManager Toast.makeText(context, "Device Booted", Toast.LENGTH_LONG).show(); Log.d("TAG","TimerTask executed...."); } 

在您的应用程序中添加一个广播接收器,应该监听("ALARM_MANAGER_ACTION")操作。 并将此操作添加到清单文件中。 我敢打赌,它也将在这两个设备上工作。

我认为在某些Android OS有时候会杀死那些在Android不熟悉或者无法识别的Devices运行的线程。 这就是TimerTask在某些设备上工作的原因,在某些设备上工作了5-10秒,然后应用程序在Device Boot被Android OS automatically 强制停止注意 – 从pipe理应用程序强制停止,而不是强制closures所以我没有得到任何错误在Logcat )。

所以在这种情况下,解决scheme是使用Android OS识别的inbuilt Mechanism ,并且不会将其杀死并保持运行模式。 在这种情况下,我pipe理使用AlarmManager来执行我的任务,它的工作原理。

我可能不是正确的,但我最终的解决scheme是使用AlarmManager使我的应用程序在每个设备中工作。

 @Override public void onReceive(Context context, Intent arg1) { Intent myIntent = new Intent(context, AlarmService.class); PendingIntent pendingIntent = PendingIntent. getService(context, 0, myIntent, 0); AlarmManager alarmManager = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 2000, 2000, pendingIntent); } 

更新:

AlaramManager is critical system service that runs all the time.