Android 从不同的类文件启动AsyncTask(通过onReceive)
不管我怎么寻找,都无法克服 我有AlarmManager,我想在每X秒后启动AsyncTask 我确实有另一个文件,class(Alarm.class),在那里我有onReceive。无论我在里面放什么,都会被完美激活 现在我有问题了。我的主线程/类(Onime)中有异步任务what。它完成许多任务,包括下载一些内容 现在的问题是,如何从另一个类启动该异步任务。遗憾的是,静态不起作用,因为asyc包含了一些不允许静态的东西。可以通过某种服务吗Android 从不同的类文件启动AsyncTask(通过onReceive),android,service,android-asynctask,Android,Service,Android Asynctask,不管我怎么寻找,都无法克服 我有AlarmManager,我想在每X秒后启动AsyncTask 我确实有另一个文件,class(Alarm.class),在那里我有onReceive。无论我在里面放什么,都会被完美激活 现在我有问题了。我的主线程/类(Onime)中有异步任务what。它完成许多任务,包括下载一些内容 现在的问题是,如何从另一个类启动该异步任务。遗憾的是,静态不起作用,因为asyc包含了一些不允许静态的东西。可以通过某种服务吗 public class Alarm extends
public class Alarm extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Put here YOUR code.
Log.d("alarminfo", "Alarm works!");
}
public void SetAlarm(Context context)
{
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, 30);
am.setRepeating(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), 1000*60*1, pi); // Millisec * Second * Minute
Log.d("alarminfo", "Set alarm!");
}
public void CancelAlarm(Context context)
{
Log.d("alarminfo", "End alarm!");
Intent intent = new Intent(context, Alarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
}
那是警报课
以下是异步(在Onime.class(不同的文件)中):
class animeUpdator扩展了异步任务{
类连接实现可运行{
公开作废运行(){
试一试{
URL=新URL(“http://xxx.com");
URLConnection URLConnection=url.openConnection();
BufferedReader BufferedReader=
新的BufferedReader(新的InputStreamReader(urlConnection.getInputStream());
弦线;
计数=1;
动画列表。清除();
而((line=bufferedReader.readLine())!=null){
帕辛甘尼姆(线);
计数+=1;
}
bufferedReader.close();
MessageToMainThread(更新主界面);
}捕获(例外e){
Log.d(“readInfo”,例如toString());
}
}
}
如果需要创建内部类的实例,可以从外部类开始:
Onime.animeUpdator.class.getConstructors()[0].newInstance(new Onime());
注意,Java类名应该以capital.ex.animeUpdater开头
更多信息,请参见此和。或者正如评论所指出的:
public class animeUpdator extends AsyncTask<ArrayList<Anime>, Integer, String> {
public animeUpdator(){
...
}
public类animeUpdater扩展异步任务{
公众动物导览员(){
...
}
}问题是…animeUpdator在“Onime”类中,与此不同的是文件:/…(mainActivity)@new update:无法访问Onime类型的封闭实例。必须使用Onime类型的封闭实例(例如x.new A()其中x是Onime的实例。-这也是我以前遇到的问题。至少它没有显示编码错误,但引发了我异常:12-17 03:18:18.829:E/AndroidRuntime(647):java.lang.RuntimeException:无法启动receiver xx.xx.xx.Alarm:java.lang.ArrayIndexOutOfBoundsException:长度=0;索引=0-我认为它可能已经在AsyncTask中出现问题?请尝试添加一个构造函数。在我编辑时。从另一个类创建AsyncTask的实例并不是一个好主意。谢谢,它可以工作:).我确实明白了,但我想这次的原因可能真的是另外一件事。无论如何,我会亲自调查的。谢谢!
public class animeUpdator extends AsyncTask<ArrayList<Anime>, Integer, String> {
public animeUpdator(){
...
}